selbst erstelltes Image mit transparentem Hintergrund

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

selbst erstelltes Image mit transparentem Hintergrund

Beitrag von Sunny »

Mahlzeit @all,
ich wollte mal fragen, wie es möglich ist ein selbst erstelltes Image mit einem transparentem Hintergrund zu speichern.

Ich hab hier bis jetzt folgenden Code...

Code: Alles auswählen

UsePNGImageDecoder()
UsePNGImageEncoder()

File$="C:\transparent.png"

CreateImage(0,240,240,32)

StartDrawing(ImageOutput(0))
  
  LineXY(10,10,10,220,RGB(0,255,255))
  LineXY(10,120,220,10,RGB(0,255,255))
  LineXY(10,120,220,220,RGB(0,255,255))

StopDrawing()
  
SaveImage(0,File$,#PB_ImagePlugin_PNG)
Bis jetzt hat das Bild allerdings nur einen schwarzen Hintergrund...
Was muss jetzt noch mit dazu kommen, damit der Hintergrund Transparent wird?

Hab schon in der PB-Hilfe nachgesehen, aber das hat mir irgendwie nicht weiter geholfen.
Zuletzt geändert von Sunny am 25.11.2010 07:39, insgesamt 1-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: selbst erstelltes Image mit transparentem Hintergrund

Beitrag von STARGÅTE »

Hab schon in der PB-Hilfe nachgesehen, aber das hat mir irgendwie nicht weiter geholfen.
Scheinbar sehr sehr oberflächlich ...
CreateImage()

Steht eindeutlig da:
Der 'Tiefe'-Wert kann mit #PB_Image_Transparent kombiniert werden (mit dem bitweisen oder dem '|' Operator), um ein Bild zu erstellen, bei dem der Alpha-Kanal auf völlige Transparenz gesetzt ist.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Re: selbst erstelltes Image mit transparentem Hintergrund

Beitrag von Sunny »

Naja, ich hab da schon so einiges aus der Hilfe ausprobiert, aber leider funktioniert nichts so, wie es soll...

Genau wie in diesem fall, denn wenn ich #PB_Image_Transparent nutze, dann wird das komplette Bild Transparent (d.h. auch die blauen Striche sind nicht mehr zu sehen).
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: selbst erstelltes Image mit transparentem Hintergrund

Beitrag von PureLust »

Hi Sunny,

Du musst zuvor noch "DrawingMode(#PB_2DDrawing_AllChannels)" setzen, damit bei den gezeichneten Pixeln auch der AlphaChannel mit beschrieben wird.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: selbst erstelltes Image mit transparentem Hintergrund

Beitrag von Thorium »

PureLust hat geschrieben:Hi Sunny,

Du musst zuvor noch "DrawingMode(#PB_2DDrawing_AllChannels)" setzen, damit bei den gezeichneten Pixeln auch der AlphaChannel mit beschrieben wird.
Er legt doch garkeinen Alphawert fest. Er legt mit RGB einen Farbwert ohne Transparenzangabe fest. Damit kann PB logischerweise nur setzten das entweder komplett transparent ist oder garnicht.

Nutze nicht RGB, sondern direkt 4 bytes Hexwerte und damit dann auch den Alphakannal.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: selbst erstelltes Image mit transparentem Hintergrund

Beitrag von PureLust »

Thorium hat geschrieben:Er legt doch garkeinen Alphawert fest. Er legt mit RGB einen Farbwert ohne Transparenzangabe fest. Damit kann PB logischerweise nur setzten das entweder komplett transparent ist oder garnicht.
Nicht ganz. Siehe Doku zu DrawingMode():
PB Dokumentation hat geschrieben:#PB_2DDrawing_Default
Dies ist der Standard-Zeichenmodus, wenn das Zeichnen beginnt. Text wird mit festem Hintergrund dargestellt und Grafikflächen werden ausgefüllt. Wenn die aktuelle Ausgabe einen Alpha-Kanal hat, verändern die Zeichen-Operationen nur die Farb-Bestandteile und lassen den Alpha-Kanal unverändert.
Somit bleibt beim Default-Modus der Alpha-Kanal stets auf durchsichtig gesetzt.

Um auch in den Alpha-Kanal schreiben zu können muss DrawingMode() zuvor auf #PB_2DDrawing_AllChannels gesetzt werden.
Erst dann kann durch Angabe eines RGBA()-Farbwertes auch der Alpha-Kanal beschrieben werden.
PB-Dokumentation hat geschrieben:#PB_2DDrawing_AllChannels
Die Zeichenoperationen werden die Farb-Kanäle und den Alpha-Kanal der Zeichenausgabe verändern. Der Inhalt der Kanäle wird ohne jegliches Vermischen ("Blending") durch die Zeichenoperation ersetzt. Das Zeichnen in diesem Modus hat den gleichen Effekt, wie zuerst mittels dem #PB_2DDrawing_Default Modus zu zeichnen, und dann nochmals die gleiche Zeichenoperation mittels dem #PB_2DDrawing_AlphaChannel Modus. Wenn die Zeichenausgabe keinen Alpha-Kanal besitzt, dann entspricht dieser Modus dem #PB_2DDrawing_Default Modus.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Riacon
Beiträge: 61
Registriert: 21.01.2008 09:40

Re: selbst erstelltes Image mit transparentem Hintergrund

Beitrag von Riacon »

ein kleines beispiel, um mal mit rumzuspielen:

Code: Alles auswählen

If CreateImage(1,700,500,32|#PB_Image_Transparent)
	StartDrawing(ImageOutput(1))
	DrawingMode(#PB_2DDrawing_AlphaBlend)
	For i=0 To 70
		For j=0 To 50
			Box(i*10,j*10,10,10,RGBA(i*3,j*5,0,2*(i+j)))
		Next
	Next	
	StopDrawing()
EndIf

OpenWindow(0,0,0,800,600,"test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(1,50,50,700,500,ImageID(1))
SetWindowColor(0, $123456) 

StartDrawing(WindowOutput(0))
	DrawImage(1,0,0,800,600)
StopDrawing()

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow:End
pb 4.51 win7 64
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: selbst erstelltes Image mit transparentem Hintergrund

Beitrag von bobobo »

#PB_2DDrawing_AlphaBlend kann durchaus mit #PB_2DDrawing_Gradient
verknüpft werden mit dem Effekt dass man sich das Boxgegurke sparen kann
also

Code: Alles auswählen

If CreateImage(1,700,500,32|#PB_Image_Transparent)
   StartDrawing(ImageOutput(1))
     DrawingMode(#PB_2DDrawing_Gradient|#PB_2DDrawing_AlphaBlend)      
      BackColor($0000FF00):   FrontColor($FF000000)
      LinearGradient(0,0,3500,2500)
      Box(10,10,680,480)
   StopDrawing()
EndIf

OpenWindow(0,0,0,800,600,"test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(1,50,50,700,500,ImageID(1))
SetWindowColor(0, $123456) ;Achtung !! kackefarben , blauer wär $654321

StartDrawing(WindowOutput(0))
   DrawImage(1,0,0,800,600)
StopDrawing()

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow:End
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Häns
Beiträge: 47
Registriert: 27.10.2007 14:30
Wohnort: Kölle

Re: selbst erstelltes Image mit transparentem Hintergrund

Beitrag von Häns »

Danke, Bo³!

Du hast mir damit aus der Boxgegurge in dem Thread geholfen! :allright:

Häns
PB 5.6
Windows 7 Professional
Antworten