Übereinanderlegen halbtransparenter Bitmaps

Posted By: Nicros

Übereinanderlegen halbtransparenter Bitmaps - 07/31/15 15:40

Hallo,
ich möchte in meiner Anwendung verschiedenfarbige Buttons benutzen.
Da es aber nicht wenige sind, möchte ich aus Speicherplatz- und Aufwandsgründen nicht für jeden Button 3 Bilder erstellen (on,off,over).
Stattdessen habe ich mir gedacht 3 Rahmen mit jeweils halbtransparenten Schatten zu erstellen.
Die Buttonrahmen haben jeweils eine Größe von 256*64 Pixeln, sind im TGA-Format gespeichert und werden im Programm später an die Bildschirmgröße angepasst.
Nun erstelle ich beim Starten der Anwendung verschiedenfarbige, rechteckige Buttonhintergründe und möchte, dass diese jeweils in den Rahmen eingefügt werden.
Das Einfügen des Hintergrundes versuche ich mit 'bmap_blit'. Das Problem ist, dass 'bmap_blit' bei mir keine Transparenz beachtet. Wenn an der Stelle (x,y) z.B. ein
roter Pixel ist und jetzt ein anderer Pixel dort hin soll, welcher aber den Alphawert Null besitzt, wird der rote Pixel einfach mit dem Neuen überschrieben.
Ich möchte aber, dass die Pixel je nach Transparenz 'überlagert' werden, wenn ihr versteht, was ich damit meine.
Gibt es eine Funktion die das übernehmen kann oder muss ich hier selbst eine schreiben ?

Hier ist mal ein kurzer Quellcode zu meinem Problem:
Code:
// bmapEmpty = leerer Hintergrund der Größe 256*64 (Alpha = 0)
// bmapRect = rechteckiger, farbiger Hintergrund, welcher die Größe 224*33 (Alpha = 100) besitzt
              und mittig in bmapEmpty plaziert wird
// BnormalO = Buttonrahmen für das "CursorOver"-Bitmap (Alpha zwischen 0 und 100)

bmapEmpty = bmap_createblack(256,64,32);   bmap_fill(bmapEmpty,vector(0,0,0),0);
bmapRect  = bmap_createblack(224,33,32);   bmap_fill(bmapRect,vector(0,0,255),100);
bmap_blit(bmapEmpty,bmapRect,vector(18,15,0),NULL);
	
bmap_blit(bmapEmpty,bmapBnormalO,NULL,NULL);   // setze den Rahmen über den Hintergrund



Danke im Voraus laugh
Posted By: Kartoffel

Re: Übereinanderlegen halbtransparenter Bitmaps - 07/31/15 15:49

liegt leider an bmap blit ;(

hatte irgendwo mal nen kleinen workaround gemacht um bmap blit vom gpu rechnen zu lassen (verwendet dann draw_quad). kann sein dass das ganze transparenz unterstützt, aber bin mir nicht sicher.
Posted By: Nicros

Re: Übereinanderlegen halbtransparenter Bitmaps - 07/31/15 16:04

Danke für die schnelle Antwort. Ich werde es gleich mal mit den Funktionen 'bmap_rendertarget' und 'draw_quad' versuchen.
Aber für mich wirkt es so als unterstützt 'draw_quad' keine variable Transparenz innerhalb eines Bitmaps, sondern eine feste die
man als Parameter setzt ... oder wie muss ich das mit dem Alphawert als Parameter verstehen, wenn man ein Bitmap übergibt?
Posted By: Kartoffel

Re: Übereinanderlegen halbtransparenter Bitmaps - 07/31/15 16:16

der alphawert ist eher ein multiplikator. der wert 100 entspricht dem faktor 1.00

im moment hab ich nur das problem, dass der modus 1 bei bmap_rendertarget wies aussieht garnicht geht...

Edit: ...was soviel bedeutet wie: man kann nicht eine bitmap laden und eine andere darüber blitten sondern muss eine leere erstellen, dann den ersten inhalt reinkopieren und den overlay dannach. (was mMn zu umständlich ist)
Posted By: Kartoffel

Re: Übereinanderlegen halbtransparenter Bitmaps - 07/31/15 16:43

gibt wie befürchtet noch ein problem: alpha blending

Das drüberlegen einer transparenten bmap versaut den alphakanal der fertigen bmap.



(das weiß wird links transparent, obwohl das fertige bild nicht transparent sein sollte)

Naja wär auch zu einfach gewesen.
bmap_blit() unterstützt kein alphablending, draw_quad() schon, aber macht das ganze falsch ;_;
Posted By: Nicros

Re: Übereinanderlegen halbtransparenter Bitmaps - 07/31/15 17:02

Ich hätte jetzt versucht das 'bmapEmpty' als Rendertarget zu setzten (mode 0) und dann das 'bmapRect' mit draw_quad hineinzuzeichen.
Dann wollte ich den Rahmen mit draw_quad in 'bmapEmtpy' zeichen. Hätte vielleicht klappen können, oder ?
Jetzt ist mir aber bei versuchten Starten aufgefallen, dass 'bmap_rendertarget' nur von der Commercial oder Pro Edition unterstützt wird.
Ich überlegen schon länger, ob sich es lohnt die Commercial zu kaufen. Das Einzige was mich bis jetzt davon abhält ist, dass kein Dateipacker enthalten ist...
Naja, ich werde es jetzt erstmal mit der 30-Tage Testversion versuchen laugh

Edit: Oh, dann würde das wegen dem Alphablending auch nicht klappen cry . Ich versuchs trotzdem mal und schau dann wie es aussieht
Posted By: Kartoffel

Re: Übereinanderlegen halbtransparenter Bitmaps - 07/31/15 17:33

Hmm sorry, hab nicht dran gedacht, dass es da Limitierungen gibt :S
Wenn alles schief läuft könnte man immernoch die Pixel der bitmap einzeln editieren, aber das ganze wird wahrscheinlich sehr langsam sein.

aber mal so nebenbei: Für den heutigen Stand ist die Engine nicht mehr wirklich aktuell und den Preis meiner Meinung nach auch nicht unbedingt wert.
Will dich jetzt nicht abschrecken oder so, nur falls du an deinem Geld hängst wär's vielleicht ne bessere Idee die Investition erstmal sein zu lassen ;/
© 2024 lite-C Forums