Transparenz
-
- Beiträge: 68
- Registriert: 26.10.2008 09:21
- Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
- Wohnort: Wien
Transparenz
Hallo an alle Helfer in der Not
Sitze jetzt schon lange Zeit vor dem PC und durchforste dieses Forum.
Ich finde recht viel, lese recht viel und verstehe nichts.
Scheinbar bin ich zu doof dafür.
Ich lade ein Bild mit
LoadImage(22, GetGadgetItemText(#WE_ListIcon_1, GetGadgetState(#WE_ListIcon_1) , 1))
und zeige es mit
StartDrawing(WindowOutput(#Window_4))
DrawImage(ImageID(22), 60, 130 )
StopDrawing()
am Bildschirm an.
Das Bild ist ein bmp mit 100x60 Pixel
Da ist ein kleines Bild drauf. Der Hintergrund ist im Window-Grau.
Wird das Bild angezeigt so sehe ich nur das eigentliche Bild und der Hintergrung ist gleich dem Windows-Fenster.
Das Funktioniert alles sehr gut.
Wenn ich jetzt aber die Windows Darstellung zB auf Farbscheme Rosa umstelle, dann sieht man natürlich den gauen Hintergrund des Bildes.
Wie kann ich den Hintergrund Transparent machen.
Eine Idiotensichere Antwort wäre für mich vorteilhaft.
lg Walter
Sitze jetzt schon lange Zeit vor dem PC und durchforste dieses Forum.
Ich finde recht viel, lese recht viel und verstehe nichts.
Scheinbar bin ich zu doof dafür.
Ich lade ein Bild mit
LoadImage(22, GetGadgetItemText(#WE_ListIcon_1, GetGadgetState(#WE_ListIcon_1) , 1))
und zeige es mit
StartDrawing(WindowOutput(#Window_4))
DrawImage(ImageID(22), 60, 130 )
StopDrawing()
am Bildschirm an.
Das Bild ist ein bmp mit 100x60 Pixel
Da ist ein kleines Bild drauf. Der Hintergrund ist im Window-Grau.
Wird das Bild angezeigt so sehe ich nur das eigentliche Bild und der Hintergrung ist gleich dem Windows-Fenster.
Das Funktioniert alles sehr gut.
Wenn ich jetzt aber die Windows Darstellung zB auf Farbscheme Rosa umstelle, dann sieht man natürlich den gauen Hintergrund des Bildes.
Wie kann ich den Hintergrund Transparent machen.
Eine Idiotensichere Antwort wäre für mich vorteilhaft.
lg Walter
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
schau dir mal DrawAlphaImage() an... 
... um das dann korrekt transparent zu bekommen,
musst du allerdings das Image in der richtige Format ändern,
also in nem Bildbearbeiter* den Hintergrund auf transparent ändern und als PNG speichern.
(* z.B. http://photofiltre.free.fr/ )

... um das dann korrekt transparent zu bekommen,
musst du allerdings das Image in der richtige Format ändern,
also in nem Bildbearbeiter* den Hintergrund auf transparent ändern und als PNG speichern.
(* z.B. http://photofiltre.free.fr/ )
- man-in-black
- Beiträge: 362
- Registriert: 21.08.2006 17:39
naja, ich weis nicht, ob es was bringt,
aber du könntest auch gucken, welche Farbe das Fenster hat und das image dann mit fillarea() einfärben.
Dafür guckst du dir die Randfarbe des Images an und änderst sie jedesmal, wenn sich die Fensterfarbe ändert.
muss aber wenn du es nimmst noch einiges anpassen,
doch damit dürften auch .bmp gehen.
aber du könntest auch gucken, welche Farbe das Fenster hat und das image dann mit fillarea() einfärben.
Dafür guckst du dir die Randfarbe des Images an und änderst sie jedesmal, wenn sich die Fensterfarbe ändert.
Code: Alles auswählen
...
if GetWindowColor(#Window) <> alte_fensterfarbe
startdrawing(imageoutput(#Image))
fillarea(1,1,-1,GetWindowColor(#Window))
stopdrawing()
endif
...
doch damit dürften auch .bmp gehen.

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Hier eine Procedure von Mischa:
Gruß
Thomas
Code: Alles auswählen
Procedure DrawTransparentImage(TransImage.l, ZielImage.l, x.l, y.l, b.l, h.l, TransColor.l = #PB_Any)
Protected hdc.l, hzwischen.l, HdcTemp.l, obj.l, HdcBack.l, HdcObject.l, HdcMem.l, HdcSave.l
Protected BmPAndBack.l, BmPAndObject.l, BmPAndMem.l, BmPSave.l, BmpBackOld.l, BmpObjectOld.l
Protected BmpMemOld.l, BmpSaveOld.l, CColor.l, target.l
ImageID(TransImage) : hdc = StartDrawing(ImageOutput(TransImage))
hzwischen = CreateCompatibleBitmap_(hdc, b, h) : HdcTemp = CreateCompatibleDC_(hdc)
obj = SelectObject_(HdcTemp, hzwischen) : HdcBack = CreateCompatibleDC_(hdc)
HdcObject = CreateCompatibleDC_(hdc) : HdcMem = CreateCompatibleDC_(hdc)
HdcSave = CreateCompatibleDC_(hdc) : BmPAndBack = CreateBitmap_(b, h, 1, 1, 0)
BmPAndObject = CreateBitmap_(b, h, 1, 1, 0) : BmPAndMem = CreateCompatibleBitmap_(hdc, b, h)
BmPSave = CreateCompatibleBitmap_(hdc, b, h) : SetMapMode_(HdcTemp, GetMapMode_(hdc))
BmpBackOld = SelectObject_(HdcBack, BmPAndBack) : BmpObjectOld = SelectObject_(HdcObject, BmPAndObject)
BmpMemOld = SelectObject_(HdcMem,BmPAndMem) : BmpSaveOld = SelectObject_(HdcSave, BmPSave)
SetStretchBltMode_(HdcTemp, #COLORONCOLOR) : StretchBlt_(HdcTemp, 0, 0, b, h, hdc, 0, 0, b, h, 13369376)
If TransColor = -1 : TransColor = GetPixel_(HdcTemp, (b - 1), 0) : EndIf
SetMapMode_(HdcTemp, GetMapMode_(hdc)) : BitBlt_(HdcSave, 0, 0, b, h, HdcTemp, 0, 0, $0CC0020)
CColor = SetBkColor_(HdcTemp, TransColor) : BitBlt_(HdcObject, 0, 0, b, h, HdcTemp, 0, 0, $0CC0020)
SetBkColor_(HdcTemp,RGB(255,255,255)) : Box(0, 0, b, h, GetSysColor_(#COLOR_BTNFACE))
StopDrawing() : ImageID(ZielImage) : target = StartDrawing(ImageOutput(ZielImage))
BitBlt_(HdcBack, 0, 0, b, h, HdcObject, 0, 0, $0330008) : BitBlt_(HdcMem, 0, 0, b, h, target, x, y, $0CC0020)
BitBlt_(HdcMem, 0, 0, b, h, HdcObject, 0, 0, $08800C6) : BitBlt_(HdcTemp, 0, 0, b, h, HdcBack, 0, 0, $08800C6)
BitBlt_(HdcMem, 0, 0, b, h, HdcTemp, 0, 0, $0EE0086) : BitBlt_(HdcTemp, 0, 0, b, h, HdcMem, 0, 0, $0CC0020)
BitBlt_(target, x, y, b, h, HdcTemp, 0, 0, $0CC0020) : StopDrawing()
DeleteObject_(obj) : DeleteObject_(BmpBackOld) : DeleteObject_(BmpObjectOld) : DeleteObject_(BmpMemOld)
DeleteObject_(BmpSaveOld) : DeleteDC_(HdcMem) : DeleteDC_(HdcBack) : DeleteDC_(HdcObject)
DeleteDC_(HdcSave) : DeleteDC_(HdcTemp) : DeleteObject_(hzwischen) : DeleteObject_(BmPAndBack)
DeleteObject_(BmPAndObject) : DeleteObject_(BmPAndMem) : DeleteObject_(BmPSave)
EndProcedure
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Ich habe den Code schon nachformatiert, orginal sind die Variablen nichtKaeru Gaman hat geschrieben:... war auch mein erster Gedanke beim Anblick von Mischas Code...walter741 hat geschrieben:Ähhh Ja....![]()
ist halt nicht nett formatiert und kommentiert...
das wird der Funktionalität aber wohl keinen Abbruch tun.
deklariert und es gibt keinerlei Spaces

Trans- und Zielimage kann man ein und dasselbe nehmen, den letzten
parameter weglassen, dann sollte eigentlich jeder damit klarkommen

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 68
- Registriert: 26.10.2008 09:21
- Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
- Wohnort: Wien
Hallo
Dieses Ähhh Ja....
steht für den komplexen Code, den ich auch mit
optimaler Formatierung nicht sofort verstehen würde.
Ich bin ein Wochenendprogrammierer.
Mein derzeitiges Projekt hat erst 4.500 Codezeilen.
Ich werde noch einige Leben brauchen um Euch das Wasser reichen zu können.
Aber ich gebe sicher nicht auf und werde den Code von
Thomas testen.
Dieses Ähhh Ja....
steht für den komplexen Code, den ich auch mit
optimaler Formatierung nicht sofort verstehen würde.
Ich bin ein Wochenendprogrammierer.
Mein derzeitiges Projekt hat erst 4.500 Codezeilen.
Ich werde noch einige Leben brauchen um Euch das Wasser reichen zu können.
Aber ich gebe sicher nicht auf und werde den Code von
Thomas testen.