Tranparentes Fenster und Alphablending

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Das hättest aber ruhig in einem eigenen Thread fragen können... so geht mein Problem nur unter. Für das ich übrigens immer noch keine Lösung habe.
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

@hoto
Habe mir das selbst heute auch nochmal angesehen. Die Structure
"BLENDFUNCTION" bietet noch einige Einstellungsmöglichkeiten.
Kannst du dir ja mal ansehen. MSDN dürfte weiterhelfen.

Das beste wäre jedoch wenn du im englischen Board nach Codes von
netmaestro suchst. Ich erinnere mich dort eine Procedure mit Beispielen
gesehen zu haben mit denen man die transparenten Farben ändern, bzw.
einiges einstellen (dazu zählt auch helligkeit und co.) konnte um das
IMG/Bitmap als PNG zu speichern.

Ich habe auch noch ein paar Probleme festgestellt. Wenn man z.b. einen
"Skin" mit auf diesem Wege erstellen will und einige Bereiche selbst
Zeichen muss, werden nur die geladenen Bilder, nicht die selbst
gezeichneten angezeigt, bzw. durchsichtig angezeigt.

Gruß Marvin
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Problem hat sich inzwischen komplett erledigt... :roll: Typisch, dass ich Stunden lang nach einer Lösung suche und dann beim ignorieren und weiter programmieren auf die einfachste Lösung überhaupt komme...

Wieso lade ich die Bilder per GDI+ rein, schreibe sie dann in ein PB Image, nur um sie dann zum resizen und anzeigen wieder in ein GDI+ Bitmap umzuwandeln? Eben, Schwachsinn. Daher flog der PB Image Teil nun raus, nicht nur das der Code nun erheblich kleiner wurde, auch sämtliche Probleme sind verschwunden, denn den Befehl, der für den Ärger mit den zu dunklen Bildern sorgte, brauch ich nun nicht mehr. :lol:

Nächstes mal code ich direkt weiter, schreib das Problem direkt ins Forum und ignoriere das Problem dann erst mal bis das Programm selbst soweit steht und ich einen besseren Überblick habe. :(
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Kannst du die neue Version posten?
Warum hätte dein Problem untergehen sollen, eine einzige Antwort hätte genügt. Ich hab ja keine Diskussion oder so angefangen :roll:
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Eine neue Funktion zum reinladen gibts nicht mehr, da das umstellen die komplette Procedure überflüssig machte. Das Ganze sieht jetzt einfach so aus:

Code: Alles auswählen

GdipCreateBitmapFromFile("bild1.png", @Image(1))
GdipCreateBitmapFromFile("bild2.png", @Image(2))
GdipCreateBitmapFromFile("bild3.png", @Image(3))

Procedure drawnew()  
  CreateImage(0,WindowWidth,WindowHeight,32)
  hdc = StartDrawing(ImageOutput(0))
  GdipCreateFromHDC( hdc, @*gfx )
  GdipDrawImage(*gfx, Image(1), 0, 0)
  GdipDrawImage(*gfx, Image(2), 100, 0)
  GdipDrawImage(*gfx, Image(3), 200, 0)
  
  sz.SIZE
  sz\cx = WindowWidth
  sz\cy = WindowHeight
  ContextOffset.POINT
  BlendMode.BLENDFUNCTION
  BlendMode\SourceConstantAlpha = 255
  BlendMode\AlphaFormat = 1
  UpdateLayeredWindow_(WindowID(0), 0, 0, @sz, hdc, @ContextOffset, 0, @BlendMode, 2)
  StopDrawing() 
EndProcedure
Der Code ist so allein natürlich nicht lauffähig, da fehlt ein GDI+ Wrapper samt GDI+ Initialisierung, dazu findet man aber schon genug in den PB Foren.

Sollte man eigentlich vor einem CreateImage prüfen ob das Bild bereits existiert oder überschreibt der Befehl sowieso dann komplett das bestehende Bild? Steht in der Hilfe leider nix drin.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Im besten Fall wird das Bild vorher freigegeben.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Da ja soweit alles geklärt ist komme ich noch mal auf die ursprüngliche Frage des Threads zurück:

Ist es möglich einen transparenten Windowed Screen zu machen oder ist dies unmöglich? Eventuell mit OpenGL möglich? Meine GDI+ Lösung geht zwar, stellt aber keine Geschwindigkeitsrekorde auf.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

@Hoto: Suche mal hier im Forum (oder im engl.) nach "overlay", da findest
Du einige Beiträge mit Beispielen. Damit kann man quasi "Sprites" über
dem Desktop benutzen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Das klingt doch mal gut, werd ich mir mal ansehen, damit sollte es ja dann kein Geschwindigkeitsproblem mehr geben. Wichtig ist halt nur, dass ich es am Ende genauso aussehen lassen kann wie es jetzt aktuell ist, also auch mit Alpha Transparenz.
Antworten