Ich habe ein Image1 (TImage) und eine Maske und Sprite (TImage) mit S/W-Bildern zugewiesen, um sie zur Designzeit zugewiesen. Jetzt möchte ich Mask und Sprite auf Image1 BitBlt ein transparentes Bild zu erhalten:Bitblt-Operation zeigt kein Ergebnis in Delphi
BMPmask := TBitmap.Create;
BMPsprite := TBitmap.Create;
try
BMPmask.Assign(Mask.Picture.Bitmap);
BMPsprite.Assign(Sprite.Picture.Bitmap);
BitBlt(Image1.Canvas.Handle, 50, 50, 96, 96, BMPmask.Canvas.Handle, 0, 0, SrcAnd);
BitBlt(Image1.Canvas.Handle, 50, 50, 96, 96, BMPsprite.Canvas.Handle, 0, 0, SrcInvert);
finally
BMPmask.Free;
BMPsprite.Free;
end;
aber wenn ich mein Programm zeigt nichts laufen. Was mache ich falsch?
TImage dient zum Anzeigen von Bildern. Es ist keine allgemeine Zeichenfläche. Erstellen Sie eine Bitmap. Blöd dazu. Weisen Sie diese Bitmap dann dem Bilderbild zu. Und ignorieren Sie keine Rückgabewerte beim Aufruf von API-Funktionen. Die zwei Bitmaps, die Sie in diesem Code erstellen, scheinen sinnlos. Warum sollten Sie Kopien von Bitmaps erstellen, die Sie bereits haben? –
@DavidHeffernan was Sie beschreiben, ist genau das, was dieser Code tut. Die 'TImage' erstellt eine' TBitmap', auf die der Code dann blitzt. Das Bild wird wahrscheinlich nicht angezeigt, da die 'TImage' nicht weiß, dass die Bitmap gezeichnet wurde. Versuchen Sie, 'Image1.Invalidate;' nach dem Zeichnen aufzurufen. Ich stimme zu, dass das Kopieren der ursprünglichen Bitmaps überflüssig ist und entfernt werden sollte. –
@Remy Ist das richtig? Die Canvas-Eigenschaft ist immer gültig und wird immer von einer Bitmap unterstützt? Ich dachte, dass die Bildkontrolle durch ein TPicture unterstützt wurde, das eine beliebige Grafik enthalten kann. –