Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [TBitmap32] - Transparent zeichnen (https://www.delphipraxis.net/104693-%5Btbitmap32%5D-transparent-zeichnen.html)

xZise 9. Dez 2007 09:59


[TBitmap32] - Transparent zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi DP,
ich habe folgendes Problem:
Es gibt verschiedene Bitmaps:
  • Ein Hintergrundbitmap
  • Eine "Datenbitmap"
  • Eine Bufferbitmap
Ich zeichne das Fenster daraufhin transparent. Soweit alles okay.
Jetzt steht in der Datenbitmap nur eine Tabelle mit verschiedenen Texten ohne einen Hintergrund.
Wenn ich jetzt die Datenbitmap dann auf die Bufferbitmap zeichne, überzeichnet er entweder die Hintergrundbitmap an der Stelle, oder er zeichnet gar nichts:
Delphi-Quellcode:
bBuffer.SetSize(bTimeTable.Width, bTimeTable.Height); // Bufferbitmapgröße = Hintergrundbitmapgröße
BitBlt(bBuffer.Canvas.Handle, 0, 0, Width, Height, bTimeTable.Canvas.Handle, 0, 0, SRCCOPY); // Hintergrund auf Buffer zeichnen

// Entweder habe ich das so getestet
BitBlt(bBuffer.Canvas.Handle, 30, 39, table.Width, table.Height, table.ImageHandle, 0, 0, SRCCOPY); // Er überzeichnet alles an der Stelle
// Oder
table.DrawTo(bBuffer, 30, 39); // Er zeichnet gar nichts (Hinweis: table ist kein TBitmap32!)

// Das hier dient zum erstellen eines Transparenten Fensters
Size.cx := Width;
Size.cy := Height;
UpdateLayeredWindow(Handle, 0, nil, @Size, bBuffer.Handle, @P, 0, @BlendF, ULW_ALPHA);
Ein kleiner Hinweis: Das Objekt "table" ist keine TBitmap32, sondern ein von TObject geerbetes TTimeTable:
Delphi-Quellcode:
procedure TTimeTable.DrawTo(Dst: TBitmap32; DstX, DstY: Integer);
begin
  bBitmap.DrawTo(Dst, DstX, DstY);
end;
Was kann man da tun?
Achso ein paar Hinweise:
  • table.bBitmap.CombineMode = cmBlend oder cmMerge
  • table.bBitmap.DrawMode = dmBlend oder dmCustom oder dmTransparent oder dmOpaque
  • Alle anderen TBitmaps32.CombineMode = cmBlend
  • Alle anderen TBitmaps32.DrawMode = dmBlend

Ehrlich gesagt weiß ich nicht weiter xD

MfG
xZise

[edit]Ich habe es geschafft. Leider sehr unschön :(
Ich habe einfach ein Hintergrundpixel denn ich einfach kopiere (auf das Datenbitmap),
aber jetzt sieht die Schrift darauf nicht sehr toll aus :( (Siehe Anhang)
Ich zeichne dass mit "Rendertext".[/edit]

[edit] :wall:
Info für mich selbst:
Zeichne nur einmal die Schrift[/edit]

xZise 10. Dez 2007 14:21

Re: [TBitmap32] - Transparent zeichnen
 
Auch wenn es so aussieht, als würde das Problem behoben, ist dem nicht so!

MfG
xZise

dizzy 11. Dez 2007 08:59

Re: [TBitmap32] - Transparent zeichnen
 
Ich sehe nirgends, dass du dem Bitmap mit der Tabelle einen Alphakanal zuweist, weswegen .Draw{To}() natürlich einfach alles zeichnet.
Die einfachste Methode bei dir wäre es, wenn du Pixelweise durch das Bitmap gehst, und bei jedem Pixel dass die Hintergrundfarbe hat, seinen Alphawert zu ändern. (Der ist das höchstwertige Byte in dem TColor32 (welcher nur ein 32 Bit Integer ist).)
dmBlend/cmBlend sind korrekt dafür.

xZise 11. Dez 2007 10:18

Re: [TBitmap32] - Transparent zeichnen
 
Also vorher das gesamte Bitmap mit der Farbe $00XXXXXX bemalen?

turboPASCAL 11. Dez 2007 15:37

Re: [TBitmap32] - Transparent zeichnen
 
Ja.

xZise 11. Dez 2007 16:25

Re: [TBitmap32] - Transparent zeichnen
 
Naja ich bemale jetzt das Bitmap mit Transparenten Schwarz (xD), aber leider funktioniert das weder mit BitBtl noch mit DrawTo :(

MfG
xZise

[edit]Nein :roll:
Ich habe die Falsche Zeile auskommentiert ;)
Funzt jetzt super xD thx :D[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz