Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 02, 2025 07:51

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: TBitMap.Transparent
BeitragVerfasst: Mi Okt 10, 2012 16:52 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Wie kann ich ein TBitMap transparent zeichnen?
Das hier funktioniert nicht. Der weiße Hintergrund bleibt weiß.

Code:
  1.   bmpw:= TBitMap.Create;
  2.   bmpw.LoadFromFile(ExtractFilePath(Application.ExeName) + 'win.bmp');
  3.   bmpw.Transparent:= true;
  4.   bmpw.TransparentColor:= bmpw.Canvas.Pixels[1, 1]; // so probiert, nachdem $00ffffff nicht funktioniert hat
  5.   PaintBox1.Canvas.Draw(Width div 2 - bmpw.Width div 2, Height div 2 - bmpw.Height div 2, bmpw);


Zuerst hatte ich es mit TextOut probiert, aber da malt er mir einen noch hässlicheren Hintergrund; außerdem kann ich nur eine Schriftgröße benutzen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Do Okt 11, 2012 10:29 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
TransparentColor hat nach der Zuweisung irgendeinen Wert, nur nicht den, den ich zugewiesen habe. (Tatsächlich ist der Wert zu groß um eine Farbe zu repräsentieren)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Do Okt 11, 2012 11:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Welches Pixelformat hat denn dein Bitmap? Evtl. musst du das erst auf pf32bit umstellen damit die Transparenz überhaupt ausgewertet wird.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Do Okt 11, 2012 13:30 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
pfDevice. aber mit pf32bit wird’s nicht besser. Das Bild enthält keine Transparenz, deswegen setze ich ja TransparentColor (bzw weil ich eben noch nicht wusste, dass TBitmap ein 32 bit Format hat).

ps: ich habe geschaut, was TBitMap macht. Dass die TransparentColor falsch war kommt daher, dass er bei getTransparentColor am Ende ein or $02000000 dranhängt. Abgesehen davon bin ich daraus aber nicht schlau geworden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Do Okt 11, 2012 15:43 
Offline
DGL Member

Registriert: Di Jun 12, 2012 21:26
Beiträge: 112
Programmiersprache: Delphi
Soweit ich weiss, ist ein Bitmap für Transparenz ungeeignet. Versuch mal folgendes:
Code:
  1.  
  2. Var    Picture:TPicture;
  3. begin
  4. IF OpenDialog1.Execute then
  5.    BEGIN
  6.     Picture:=TPicture.Create;
  7.     Picture.Bitmap.LoadFromFile(OpenDialog1.FileName);
  8.     Picture.Graphic.Transparent:=True;
  9.     PaintBox1.Canvas.Draw(10,10,Picture.Graphic);
  10.     Picture.Free;
  11.    END;
  12. end;
  13.  

Der transparente Pixel müsste laut Online-Hilfe der linke untere sein. Hab das aber nicht getestet.

Viele Grüße


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Do Okt 11, 2012 17:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Nein, funktioniert so auch nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Do Okt 11, 2012 19:55 
Offline
DGL Member

Registriert: Mo Jun 30, 2008 12:47
Beiträge: 69
Versuch mal, bei der Paintbox die Transparenz einzustellen.
Ich glaube, dass die Transparenz bei einem Bild sich nur auf die bildmanipulierende (darauf Zeichnen) Routinen Auswirkung hat..

_________________
...GOD is wearing black...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Fr Okt 12, 2012 10:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Es gibt kein TPaintBox.Transparent


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Fr Okt 12, 2012 16:27 
Offline
DGL Member

Registriert: Di Jun 12, 2012 21:26
Beiträge: 112
Programmiersprache: Delphi
Ich habs mal getestet, und bei mir funktionierts einwandfrei, sowohl in Delphi als auch in Lazarus. Hier mal eine kleine Erweiterung:
Code:
  1. Var    Picture:TPicture;
  2. begin
  3. IF OpenDialog1.Execute then
  4.    BEGIN
  5.     Picture:=TPicture.Create;
  6.     Picture.Bitmap.LoadFromFile(OpenDialog1.FileName);
  7.     Picture.Graphic.Transparent:=True;
  8.     PaintBox1.Canvas.Brush.Color:=clBlue;
  9.     PaintBox1.Canvas.FillRect(PaintBox1.ClientRect); //PaintBox wird mit blau gefüllt
  10.     PaintBox1.Canvas.Draw(10,10,Picture.Graphic);
  11.     Picture.Free;
  12.    END;
  13. end; 

Bescheib doch bitte ein bisschen genauer, was nicht funktioniert, sonst artet das in Raterei aus, und Dein Problem wird bestimmt nicht gelöst.

Benutzt Du Delphi oder Lazarus und welche Version? Wird das Bitmap z.B. bei meinem Beispiel gar nicht dargestellt oder lediglich die Transparenz nicht? Hast Du darauf geachtet, dass die Transparenz über den linken unteren Pixel festgelegt wird? Der linke obere Pixel hat übrigens die Koordinaten Pixels[0,0]. Die Zählung beginnt bei 0. Vielleicht liegt auch da der Fehler. Ich weiss schließlich nicht, wie Dein Bitmap aussieht.

Viele Grüße


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Fr Okt 12, 2012 18:05 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Delphi 7
Das Bitmap enthält schwarzen Text auf weißem Hintergrund. Ob es nun den links oberen oder den links unteren Pixel als Transparent definiert oder ich die Farbe des zweiten Pixels nehme macht keinen Unterschied, die sind alle weiß. Dargestellt wird sowohl der Text (erwünscht) als auch der Hintergrund (unerwünscht). Was dein Beispiel angeht, erkenne ich schlicht keinen Unterschied zu dem was ich mache (außer dass du einen OpenDialog benutzt, aber das File, das ich lade, existiert (und wird korrekt geladen), und dass du die PaintBox blau füllst, während ich hier den Großteil meiner Zeichenroutine ausgespart habe).

Dateianhang:
no transparency.jpg


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Fr Okt 12, 2012 18:36 
Offline
DGL Member

Registriert: Di Jun 12, 2012 21:26
Beiträge: 112
Programmiersprache: Delphi
sharkman hat geschrieben:
Was dein Beispiel angeht, erkenne ich schlicht keinen Unterschied zu dem was ich mache

Der Unterschied ist, dass ich TPicture statt TBitmap verwende. Dachte, dass das vielleicht einen Unterschied macht. :(
Bei mir funktioniert Dein Beispiel auch in Delphi2005 und in Lazarus.

EDIT:
sharkman hat geschrieben:
ps: ich habe geschaut, was TBitMap macht. Dass die TransparentColor falsch war kommt daher, dass er bei getTransparentColor am Ende ein or $02000000 dranhängt. Abgesehen davon bin ich daraus aber nicht schlau geworden.
Versuch doch mal, das Pixelformat nach dem Laden auf pf24Bit umzustellen. Das muss ich immer machen, wenn ich Bitmaps mit Scanline bearbeiten will.

Viele Grüße


Zuletzt geändert von subotai am Sa Okt 13, 2012 07:36, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Fr Okt 12, 2012 19:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
sharkman: Dein Code läuft so bei mir mit Delphi 7, auch wenn ich clWhite oder $00ffffff nutze. Irgendwelche Units inkludiert die das Fensterdesign und somit die Transparenz beeinflussen könnten (sehr weit dahingesponnen, aber könnte ja sein) ? Erstelle doch mal ein Testprojekt, dann weiß man wo man anpacken muss.

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Sa Okt 13, 2012 01:57 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
.BrushStyle := bsClear;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TBitMap.Transparent
BeitragVerfasst: Sa Okt 13, 2012 09:22 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
Versuch doch mal, das Pixelformat nach dem Laden auf pf24Bit umzustellen.
Danke, funktioniert so. (behält zwar einen unschönen weißen Rand, aber das liegt an den Daten)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.016s | 15 Queries | GZIP : On ]