Einzelnen Beitrag anzeigen

ddcool

Registriert seit: 8. Jun 2003
146 Beiträge
 
Delphi XE2 Architect
 
#2

AW: Zwei Transparente PNGs kombinieren

  Alt 30. Aug 2011, 12:47
Nach langem Suchen haben ich folgenden Quelltext gefunden, der genau das macht was ich will.

Code:
procedure DrawPngWithAlpha(Src, Dest: TPngImage; const R: TRect);
var
  X, Y: Integer;
  Alpha: PByte;
begin
  Src.Draw(Dest.Canvas, R);

  for Y := R.Top to R.Bottom - 1 do
    for X := R.Left to R.Right - 1 do
    begin
      Alpha := @Dest.AlphaScanline[Y]^[X];
      Alpha^ := Min(255, Alpha^ + Src.AlphaScanline[Y - R.Top]^[X - R.Left]);
    end;
end;
Allerdings ist der Quelltext sehr unperformant, da ich ja sehr häufig die Form neu zeichnen lasse, da ich die gesamte Form mittels UpdateLayeredWindow zeichne.
Gibt es da alternativen, oder ist meine Herangehensweise eventuell falsch?

Ich habe ein TImage-Object auf welches dann aus Bildresourcen die Form zusammengesetzt wird. Das realisiere ich erstmalig mit Assign, um den Hintergrund zuzuweisen und alles weitere kommt dann mit Draw, oder oben genannter Funktion auf das TImage.
Dann benutze ich TJvTransparentForm mit dem TImage als Layer, um meine Form mit dem gewünschten Design auszustatten. Jedoch will ich, dass sich die Form alle paar Millisekunden neu Zeichnet, da sich das TImage ja auch verändern kann (Laufschrift, etc.).

Macht man das so, oder benutzt man da lieber ein OnPaint-Ereignis? Momentan liegt die CPU-Auslastung bei ca 10-15%, was meiner Meinung nach zu viel ist.
  Mit Zitat antworten Zitat