Tranparentes Fenster und Alphablending
Tranparentes Fenster und Alphablending
Ist es möglich einem Windowed Screen Transparenz zu verleihen, so das lediglich die Sprites angezeigt werden, jedoch der eigentliche Hintergrund (schwarz) nicht zu sehen ist, statt dessen sieht man dort was hinter dem Window liegt. Geht sowas irgendwie?
Zuletzt geändert von Hoto am 01.07.2008 14:27, insgesamt 1-mal geändert.
screen transparent
war es was ich in die Boardsuche tippte und...
http://www.purebasic.fr/german/viewtopi ... 247#170247 kam dabei raus
MfG
war es was ich in die Boardsuche tippte und...
http://www.purebasic.fr/german/viewtopi ... 247#170247 kam dabei raus

MfG
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Ich hab den Thread mal umbenannt, um nicht noch ein Thread zu öffnen.
Inzwischen bin ich vom Windowedscreen abgekommen und will nun ein transparentes Fenster in Verbindung mit GDI+ nutzen. Das funktioniert soweit auch, doch da leider nur eine Farbe transparent gesetzt wird geht scheinbar kein richtiges Alphablending, daher sieht das Ergebnis dann so aus:

Ich nutze folgenden Code um das Fenster transparent zu schalten und dafür die Farbe Lila:
Eine wirkliche Lösung für das Problem will mir nicht einfallen. Vielleicht hat ja Jemand anderes hier eine Idee.
Inzwischen bin ich vom Windowedscreen abgekommen und will nun ein transparentes Fenster in Verbindung mit GDI+ nutzen. Das funktioniert soweit auch, doch da leider nur eine Farbe transparent gesetzt wird geht scheinbar kein richtiges Alphablending, daher sieht das Ergebnis dann so aus:

Ich nutze folgenden Code um das Fenster transparent zu schalten und dafür die Farbe Lila:
Code: Alles auswählen
SetWindowLong_(WindowID(#W_Main), #GWL_EXSTYLE, GetWindowLong_(WindowID(#W_Main),#GWL_EXSTYLE)|#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(#W_Main), RGB(255,0,255), 0, 1)
- Deluxe0321
- Beiträge: 336
- Registriert: 19.05.2006 00:31
- Kontaktdaten:
Code: Alles auswählen
;http://www.purebasic.fr/english/viewtopic.php?p=211814#211814
;netmaestro [Sat Sep 29, 2007]
Procedure StringToBStr (string$) ; By Zapman Inspired by Fr34k
Protected Unicode$ = Space(Len(String$)* 2 + 2)
Protected bstr_string.l
PokeS(@Unicode$, String$, -1, #PB_Unicode)
bstr_string = SysAllocString_(@Unicode$)
ProcedureReturn bstr_string
EndProcedure
ProcedureDLL LoadDecodedImage(Filename$)
CompilerIf Defined(GdiplusStartupInput, #PB_Structure) = 0
Structure GdiplusStartupInput
GdiPlusVersion.l
*DebugEventCallback.Debug_Event
SuppressBackgroundThread.l
SuppressExternalCodecs.l
EndStructure
CompilerEndIf
OpenLibrary(0, "gdiplus.dll")
input.GdiplusStartupInput
input\GdiPlusVersion = 1
CallFunction(0, "GdiplusStartup", @*token, @input, #Null)
CallFunction(0, "GdipCreateBitmapFromFile", StringToBStr(Filename$), @*image)
CallFunction(0, "GdipGetImageWidth", *image, @Width.l)
CallFunction(0, "GdipGetImageHeight", *image, @Height.l)
CallFunction(0, "GdipCreateHBITMAPFromBitmap", *image, @imageid.l, -1)
CallFunction(0, "GdipDisposeImage", *image)
CallFunction(0, "GdiplusShutdown", *token)
CloseLibrary(0)
return_imagenumber = CreateImage(#PB_Any, width, height, 32)
StartDrawing(ImageOutput(return_imagenumber))
DrawAlphaImage(imageid,0,0)
StopDrawing()
ProcedureReturn return_imagenumber
EndProcedure
img = LoadDecodedImage("Documents.png")
OpenWindow(0,0,0,300,300,"",#PB_Window_ScreenCentered|#PB_Window_BorderLess|#PB_Window_Invisible)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_LAYERED)
CreateGadgetList(WindowID(0))
hDC = StartDrawing(ImageOutput(img))
sz.SIZE
sz\cx = ImageWidth(img)
sz\cy = ImageHeight(img)
ContextOffset.POINT
BlendMode.BLENDFUNCTION
BlendMode\SourceConstantAlpha = 255
BlendMode\AlphaFormat = 1
UpdateLayeredWindow_(WindowID(0), 0, 0, @sz, hDC, @ContextOffset, 0, @BlendMode, 2)
StopDrawing()
ImageGadget(0,0,0,0,0,ImageID(img))
HideWindow(0,0)
Repeat:E=WaitWindowEvent():Delay(5):Until(E=#PB_Event_CloseWindow):End
- Deluxe0321
- Beiträge: 336
- Registriert: 19.05.2006 00:31
- Kontaktdaten:
Wenn ich die -1 am Ende in 0 oder eine positive Zahl ändere ist die Farbe perfekt und die Transparenz auf den ersten Blick in Ordnung.
http://hoto.ath.cx/box.png
Funktioniert so auch auf meinem EeePC 900 unter Win XP Home.
Code: Alles auswählen
CallFunction(0, "GdipCreateHBITMAPFromBitmap", *image, @imageid.l, -1)
Funktioniert so auch auf meinem EeePC 900 unter Win XP Home.