// Es können Bilder mit einem Randverlauf dargestellt werden, wobei der
// Verlauf für jede Kante einzeln angewählt werden kann.


// Getestet mit D4 unter XP

procedure RandVerlauf(Bild: TGraphic; breite: Byte; 
  links, oben, rechts, unten: boolean; farbe: TColor); 
const maxi = 256; 
var x, y,  w3, h, s, t: integer; 
  p: pbytearray; 
  r, g, b: byte; 
  bm: TBitmap; 
  procedure rechnen; 
  begin 
    t := maxi - s; 
    p[y] := (p[y] * s + b * t) div maxi; 
    p[y + 1] := (p[y + 1] * s + g * t) div maxi; 
    p[y + 2] := (p[y + 2] * s + r * t) div maxi; 
    inc(y, 3); 
  end; 
  procedure horizontal(wert: Integer); 
  begin 
    y := 0; 
    while y < w3 do begin 
      s := (maxi div breite) * wert; 
      rechnen; 
    end; 
  end; 
begin 
  bm := TBitmap.create; 
  bm.pixelformat := pf24bit; 
  bm.width := bild.width; 
  bm.height := bild.height; 
  bm.canvas.draw(0, 0, bild); 
  w3 := bm.width * 3 - 1; 
  h := bm.height - 1; 
  farbe := colortorgb(farbe); 
  r := getrvalue(farbe); 
  g := getgvalue(farbe); 
  b := getbvalue(farbe); 
  for x := 0 to h do begin 
    p := bm.scanline[x]; 
    if oben and (x <= breite) then horizontal(x); 
    if unten and (x >= h - breite) then horizontal(h - x); 
    if links then begin 
      y := 0; 
      while y < breite * 3 - 1 do begin 
        if y mod 3 = 0 then 
          s := (maxi div breite) * (y div 3); 
        rechnen; 
      end; 
    end; 
    if rechts then begin 
      y := (bm.width - breite) * 3; 
      while y < w3 do begin 
        if y mod 3 = 0 then 
          s := (maxi div breite) * ((w3 - y) div 3); 
        rechnen; 
      end; 
    end; 
  end; 
  Bild.assign(bm); 
  bm.free; 
end; 
 
 
// Beispielaufruf 
 
procedure TForm1.Button4Click(Sender: TObject); 
begin 
  randverlauf(Image3.picture.graphic, 22, true, true, true, true, color); 
  Image3.refresh; 
end;


Zugriffe seit 6.9.2001 auf Delphi-Ecke