[Gelöst]Erstellen einer Maske zur Laufzeit von einem Bild

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

BladeRunner

Moderator

BeitragDo, Jan 28, 2010 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Also der Effekt den ich aus dem Video sehe sollte sich wie gesagt nachbauen lassen. Eventuell wirst du mit das Bild noch mehrfach zeichnen müssen.
Oder du skalierst es ein wenig und setzt es mit minimalem alpha drüber, dann wirkt es wie ein glow.


EDIT:
Code: [AUSKLAPPEN]
SuperStrict

Local wb:TImage=LoadAnimImage ("gfx/wonderboy_anim.png" , 24 , 24 , 0 , 10)
Graphics 640 , 480
MidHandleImage wb

Repeat
   SetBlend alphablend
   DrawImage wb , 100 , 100
   DrawImage wb,300,100 'vergleich
   SetBlend lightblend
   DrawImage wb , 100 , 100
   DrawImage wb , 100 , 100
   SetScale 5 , 5
   SetAlpha .4
   SetColor 255,128,128
   DrawImage wb , 100 , 100
   SetColor $ff,$ff,$ff
   SetAlpha 1.0
   SetScale 4 , 4
   Flip
   Cls
   
   
Until AppTerminate()

mit ein wenig Spielerei erreicht man auch Gloweffekte und dergleichen. Die Scalewerte hier sind da meine Vorlage so winzig ist. Deswegen wirkt alles auch ein wenig verwaschen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Skabus

BeitragFr, Jan 29, 2010 1:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey das ist tatsächlich ne gute Idee, werd ich mir noch eingehend zu Gemüte führen^^

Ich hätte nochmal ein anderes Problem:

Ich habe ja per Pixmap mein Bild meines Hauptcharas ausgelesen und anhand dessen eine andere
Pixmap erstellt, die quasi an jeder Stelle an der kein transparentes Pixel ist ein weißen Pixel zeichnet.

Das ist ja dann letzlich meine Maske.Diese habe ich dann per LoadAnimImage(im BM-Hilfe stand man kann als source auch ne Pixmap verwenden) zu einem weiterverarbeitbaren TImage gemacht.

Das Anzeigen funzt auch problemlos, allerdings ignoriert dieses Bild jegliche Transparenz.
Das heißt trotz dass Pixel mit Farbwert 255,0,255 transparent angezeigt werden soll, wird einfach
stur alles gezeichnet.

Weiß jemand woran das liegt?Da die Maske ja nicht per GIMP und Co. erstellt wurde kann ich ja
schlecht ne Alpha-Information dazutun^^


MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

DaysShadow

BeitragFr, Jan 29, 2010 1:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst der Pixmap auch das richtige Format beim Erstellen angeben, entweder PF_BGRA8888 oder PF_RGBA8888 und dementsprechend dann auch 4 Farbwerte beim Schreiben angeben, nicht $FFFFFF sondern z.B. halt $FFFFFFFF.

MfG DaysShadow
Blessed is the mind too small for doubt

Skabus

BeitragFr, Jan 29, 2010 1:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hm kann es einen Unterscheid zwischen PF_BGRA8888 und PF_RGBA8888?

Weil ansonsten hab ich alles so gemacht.Also eigentlich fehlt da nix oô


MfG Ska

EDIT: Hier mal der Code mit dem ich die Pixmap mit der Maske erstelle:


BlitzMax: [AUSKLAPPEN]

Function createMask:TPixmap(path:String)

Local curPixel:Int
Local x:Int
Local y:Int
Local curImage:TPixmap = LoadPixmap(path)
Local curMask:TPixmap = CreatePixmap(256,256,PF_RGBA8888)


'es wird durch jede Position durchgegangen
For y=0 To 255
For x=0 To 255


'der aktuelle Pixel wird ausgelesen
curPixel = ReadPixel(curImage,x,y)

'nun wird dieser geprüft,sollte er 255,0,255 als Farbwert besitzten
'wird er übernommen ansonsten wird der Pixel weiß eingefärbt an die Maske übergeben
If(curPixel = transparentColor) Then

WritePixel(curMask,x,y,curPixel)

Else

'ein weißer Pixel wird an der Stelle gezeichnet
WritePixel(curMask,x,y,$FFFFFFFF)

EndIf

Next
Next

Return curMask

End Function
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

DaysShadow

BeitragFr, Jan 29, 2010 1:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Steht ja in der Hilfe, was der Unterschied ist, das eine ist im Little Endian Format und das andere im Big Endian, Windows arbeitet wohl mit Little Endian, daher wäre PF_BGRA8888 richtig.
Ansonsten sieht es ok aus, ist die Variable "transparentColor" ebenfalls mit 4 Werten gefüttert worden und nicht evtl. nur mit drei?

Edit: Ach ne, ist ja Unsinn das mit der Variablen...gezeichnet wird ja richtig ^^

MfG DaysShadow
Blessed is the mind too small for doubt

Skabus

BeitragFr, Jan 29, 2010 1:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, habs probiert, sieht aber kein bisschen anders aus o.O

Kann es sein, dass irgendwie durch Verlust/etc. evtl. der Farbwert als 255,0,255 erscheint aber
evtl. 254,0,254 oder sowas ist und darum nicht korrekt maskiert wird?

Ich versteh net was da nun wieder net funktioniert Sad


MfG Ska

Edit: Da sieht mans mal wieder, eine Nacht drüber geschlafen und schon gehts...
Is ja klar warum des net funzt. Wenn ich dort den Alphakanal angebe dann wird ja nur die
Farbe als Transparent angezeigt die ich per Alphakanal eingestellt habe.Dann wird
ja SetMaskColor vollständig ignoriert.

Es muss also so gemacht werden dass bei übernahme der unsichtbaren Pixel auch der Alphakanal
korrekt mitgegeben wird.

So jetzt funktioniert das Blinken korrekt.Wiedermal vielen Dank an euch alle Smile

Als grafische Aufbesserung könnte man statt einen komplett flache Maske zu nehmen noch einen Farbverlauf hereinbringen, dann sähe der Effekt noch plastischer aus, aber das werd ich in Angriff nehmen
wenn ichs mal brauche Wink
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

BtbN

BeitragFr, Jan 29, 2010 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht 100% sicher, ob ich den Effekt richtig verstanden habe, deshalb mal dieser Versuch:

BlitzMax: [AUSKLAPPEN]
SuperStrict

Framework BRL.Max2D
Import BRL.GLMax2D
Import BRL.D3D9Max2D
Import BtbN.Stencil
Import BRL.RamStream
Import BRL.PngLoader

Incbin "fig.png"

AppTitle = "Stencil Blink"
SetGraphicsDriver(D3D9Max2DDriver())
'SetGraphicsDriver(GLMax2DDriver())
Graphics(800,600,0,60,GRAPHICS_STENCILBUFFER)

Global fig:TImage = LoadImage("incbin::fig.png")

SetClsColor(128,128,128)
SetBlend(ALPHABLEND)

Repeat
Cls

Local mx:Int = MouseX()
Local my:Int = MouseY()

DrawImage(fig, mx, my)

EnableStencil()
ClearStencil()

BeginStencil()
DrawImage(fig, mx, my)
EndStencil()

SetColor(255,0,0)
SetAlpha(0.4)
DrawRect(0, 0, GraphicsWidth(), GraphicsHeight())
SetAlpha(1.0)
SetColor(255,255,255)

DisableStencil()

Flip()
Until KeyHit(KEY_ESCAPE) Or AppTerminate()

End


Trifft das halbwegs das, an was du so gedacht hast?

Skabus

BeitragFr, Jan 29, 2010 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Öh kA aus dem Code seh ichs jetzt net, und lauffäjhigf ist es auch net ohne weiteres^^"
Also kA


MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

BtbN

BeitragFr, Jan 29, 2010 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/foru...hp?t=33741

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group