Einzelnen Beitrag anzeigen

Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#1

Bmp+Farbe mit "or" verknüpfen - kein Copymode vorh

  Alt 19. Dez 2006, 17:03
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]
  Mit Zitat antworten Zitat