![]() // Querverweis:
eingefärbte Raster-Bitmaps
erstellen // Wenn man
auf ein Desktop-Icon klickt, wird dieses mit einem Raster
uses commctrl; procedure DrawBlendingBitmap(dc: HDC; b: TBitmap; x, y: integer; u: uint); var m: TBitmap; i: TImagelist; begin m := TBitmap.create; m.width := b.width; m.height := b.height; m.canvas.brush.color := 0; m.canvas.fillrect(m.canvas.cliprect); i := TImagelist.create(nil); i.width := b.width; i.height := b.height; i.add(b, m); ImageList_Draw(i.handle, 0, dc, x, y, u); i.free; m.free; end; // Ein Bitmap wird mit einem feinmaschigen // Raster überblendet. procedure TForm1.Button1Click(Sender: TObject); var bmp: TBitmap; links, oben: integer; begin links := 10; oben := 5; bmp := TBitmap.create; bmp.loadfromfile('d:\dbr\frau.bmp'); DrawBlendingBitmap(canvas.handle, bmp, links, oben, ILD_BLEND); bmp.free; end; // Ein Bitmap wird mit einem groben Raster überblendet. procedure TForm1.Button2Click(Sender: TObject); var bmp: TBitmap; links, oben: integer; begin links := 10; oben := 5; bmp := TBitmap.create; bmp.loadfromfile('d:\dbr\frau.bmp'); DrawBlendingBitmap(canvas.handle, bmp, links, oben, ILD_FOCUS); bmp.free; end;
// Variante 2: type art = 1..5; procedure punkte(src, dst: TBitmap; farbe: TColor; wie: art); var x, y, b3: integer; p: PBytearray; var r, g, b: byte; begin dst.pixelformat := pf24bit; dst.width := src.width; dst.height := src.height; dst.canvas.draw(0, 0, src); b3 := dst.width * 3; farbe := colortorgb(farbe); r := getrvalue(farbe); g := getgvalue(farbe); b := getbvalue(farbe); for y := 0 to dst.height - 1 do begin p := dst.scanline[y]; x := 0; while x < b3 do begin if (wie = 1) and (odd(y xor x)) or (wie = 2) and (odd(y and x)) or (wie = 3) and (odd(y or x)) or (wie = 4) and (odd(y * 2 or x)) or (wie = 5) and (odd(y or x * 2)) then begin p[x] := b; p[x + 1] := g; p[x + 2] := r; end; inc(x, 3); end; end; end; // Beispielaufruf procedure TForm1.Button1Click(Sender: TObject); var bmp: TBitmap; x: integer; begin bmp := TBitmap.create; for x := 1 to 5 do begin punkte(Image1.Picture.Bitmap, bmp, clnavy, x); canvas.draw(image1.left + (image1.width + 10) * x, image1.top, bmp); end; bmp.free; end; |
Zugriffe seit 6.9.2001 auf Delphi-Ecke