Hi!
Es gibt ja jede Menge verschiedene CopyModes (SRCCOPY, ...), aber ich habe keinen gefunden, der das Source-Bitmap mittels "or" mit einer Farbe (z.B. Brush.Color des Dest-Images) verknüpft.
Deswegen hab ich mir dafür selber nen Code geschrieben:
Delphi-Quellcode:
// kopiert "Src or Color" an die Position (AX, AY) des Dest-Bitmaps
procedure DrawOr(const Dest: TBitmap; AX, AY: Integer; const Src: TBitmap; Color: TColor);
type
TPixArray = array[0..2] of Byte;
var
Buffer: TBitmap;
SrcP: ^TPixArray;
X, Y: Integer;
begin
Buffer := TBitmap.Create;
try
Buffer.SetSize(Src.Width, Src.Height);
BitBlt(Buffer.Canvas.Handle, 0, 0, Buffer.Width, Buffer.Height,
Src.Canvas.Handle, 0, 0, SRCCOPY);
Buffer.PixelFormat := pf24Bit;
for Y := 0 to Buffer.Height - 1 do
begin
SrcP := Buffer.ScanLine[Y];
for X := 0 to Buffer.Width - 1 do
begin
SrcP^[3 * X] := SrcP^[3 * X] or ((Color shr 16) and $FF);
SrcP^[3 * X + 1] := SrcP^[3 * X + 1] or ((Color shr 8) and $FF);
SrcP^[3 * X + 2] := SrcP^[3 * X + 2] or (Color and $FF);
end;
end;
Buffer.Transparent := Src.Transparent;
Buffer.TransparentColor := Src.TransparentColor;
Dest.Canvas.Draw(AX, AY, Buffer);
finally
Buffer.Free;
end;
end;
Lässt sich dieser Code optimieren? Hab ich ihn umsonst geschrieben, weil es schon irgendwo eine (bessere) Alternative gibt?
[edit]Wertparameter der Objektreferenzen in Konstantenparameter umgewandelt[/edit]