AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[TBitmap32] - Transparent zeichnen

Offene Frage von "xZise"
Ein Thema von xZise · begonnen am 9. Dez 2007 · letzter Beitrag vom 11. Dez 2007
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

[TBitmap32] - Transparent zeichnen

  Alt 9. Dez 2007, 10:59
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]
Info für mich selbst:
Zeichne nur einmal die Schrift[/edit]
Miniaturansicht angehängter Grafiken
timetabtop_135.png  
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#2

Re: [TBitmap32] - Transparent zeichnen

  Alt 10. Dez 2007, 15:21
Auch wenn es so aussieht, als würde das Problem behoben, ist dem nicht so!

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: [TBitmap32] - Transparent zeichnen

  Alt 11. Dez 2007, 09:59
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.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

Re: [TBitmap32] - Transparent zeichnen

  Alt 11. Dez 2007, 11:18
Also vorher das gesamte Bitmap mit der Farbe $00XXXXXX bemalen?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: [TBitmap32] - Transparent zeichnen

  Alt 11. Dez 2007, 16:37
Ja.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

Re: [TBitmap32] - Transparent zeichnen

  Alt 11. Dez 2007, 17:25
Naja ich bemale jetzt das Bitmap mit Transparenten Schwarz (xD), aber leider funktioniert das weder mit BitBtl noch mit DrawTo

MfG
xZise

[edit]Nein
Ich habe die Falsche Zeile auskommentiert
Funzt jetzt super xD thx [/edit]
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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