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

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Skabus

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

BeitragDo, Jan 28, 2010 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich möchte eine sog. "Maske" einer Grafik erstellen.Dabei möchte ich ein vorhandenes Bild(in meinem Fall
alle Spielercharaktere) auslesen und jeden Pixel mit einer Farbe maskieren.

Dabei liegt die Grafik des Spielers in TImage-Form vor.
Ich habe mir überlegt, jeden Pixel(natürlich vor dem Start der Hauptschleife) auszulesen und
zu prüfen ob der Farbwert dem Wert entspricht der transparent werden soll(in meinem Fall 255,0,255 oder $FF00FF) oder einen anderen Farbwert hat.

Ist der Farbwert ein transparent anzuzeigender Pixel wird dieser übernommen, ist dem nicht soll
der Pixel in einer anderen Farbe(z.B. rot) eingefärbt werden.

So hatte ich mir das erstellen der Maske zumindest vorgestellt.Vielleicht gibts noch eine bessere Methode.
Wäre nett falls es eine gibt, das mich jemand drauf bringt^^

Meine Frage ist nun: Muss ich jetzt aus meinen TImage-Bildern eine TPixmap machen?
Oder gibt es eine andere Möglichkeit?

Und wenn ja, muss ich dann die Bilder welche AnimImages darstellen, noch was umprogrammieren
oder reicht es aus, einfach alles in Pixmap umzuschreiben?
Würde es evtl. Sinn machen vorher das Bild zunächst auf eine Pixmap zu laden und dann
daraus die Maske zu erstellen?

Fragen, über Fragen.
Ich hoffe ihr könnt mir helfen^^

Ich bedank mich wie immer shconmal im vorraus!


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
  • Zuletzt bearbeitet von Skabus am Fr, Jan 29, 2010 11:15, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragDo, Jan 28, 2010 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Spricht etwas dagegen deine Spielfiguren direkt als .png mit Transparenz zu erzeugen? Dann Fällt die Maskiererei weg.
Wenn Du dann noch dein Image umfärben willst (allerdings uni) erstelle es in Weiss/Grau-werten und setze beim Einzeichnen die Zeichenfarbe auf den gewünschten Wert.

Zusammengefasst:
setblend ALPHABLEND
setcolor r,g,b
drawimage
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

BeitragDo, Jan 28, 2010 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir gehts vor allem darum einen Blinkeffekt zu erzeugen.Ich möchte, dass ich die Spielfigur, Gegner und dergleichen blinken kann.Und das wahlweise in allen Farben.

Daher wollte ich eine Maske erstellten und diese dann drüber legen, beim Anzeigen der Spielfigur und dann
langsam den Alphawert erhöhen und wieder verringern, damit dieser typische Blinkeffekt entsteht.

Gibts denn da noch ne intelligentere Lösung?

Ich hab auch schon überlegt, ob ich net einfach irgendwie den Chara mit Alphablending ausblende, aber wird dann auch die Umrisse entsprechend angezeigt?

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

BladeRunner

Moderator

BeitragDo, Jan 28, 2010 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du echte Transparenz und Alphablending nimmst sollte das kein Problem sein. Auch die Farben kannst Du wie oben beschrieben setzen, sprich dein gesamtes Image in eine farbe tauchen.

Einfach mal vor dem zeichnen den AlphaWert mit sinus modulieren und deine Figur 'blinkt' ein wenig durch ihre Transparenz. Alternativ mal mit lightblend rumspielen, da das ja additiv wird.
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

BeitragDo, Jan 28, 2010 14:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Was genau meinst du mit echter Transparenz?


Sry weiß jetzt net wo der Unterschied dazu ist, einfach einen beliebigen Wert per MaskColor wegzulassen^^"


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

Nicdel

BeitragDo, Jan 28, 2010 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei echter Transparenz hast du noch Abstufungen drin.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Skabus

BeitragDo, Jan 28, 2010 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Und das heißt genau?Mach ich diese beim Erstellen des Bildes mit Zeichenprogramm X oder ist das eine
programminterne Änderung?


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

Nicdel

BeitragDo, Jan 28, 2010 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Die machst du beim Erstellen in das PNG-Bild mit rein Wink

Edit: Hier hats noch Infos zur Transparenz: http://de.wikipedia.org/wiki/P...k_Graphics
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Skabus

BeitragDo, Jan 28, 2010 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Nicdel, ich werds mal versuchen Smile

BladeRunner: Also ich hab mir deinen Beitrag fünfmal durchgelesen, aber entweder versteh ichs net oder wir reden, hier über verschiedene Effekte ^^"

Ich meine sowas:

http://www.youtube.com/watch?v=M89mngF_190
(ab 0:25 etwa)

Hab ich dich jetzt nur falsch verstanden, oder reden wir hier über unterschiedliche Sache?
Sry wegen der Fragerei aber ich steh gerade aufm Schlauch :rolleyes:

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

beanage.johannes

BeitragDo, Jan 28, 2010 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
eine weit aus simplere methode:

male einfach ein bild (maske) deines characters. komplett in weiß.
den kannst du dann drüberlgen (alpha wert erhöhen/verniedrigen) und mit setcolor die farbe einstelle... so einfach ist das... koplett ohne pixel lesen usw.
für transparente bilder nutze den alphachannel von png.

Skabus

BeitragDo, Jan 28, 2010 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
beanage.johannes hat Folgendes geschrieben:
eine weit aus simplere methode:

male einfach ein bild (maske) deines characters. komplett in weiß.
den kannst du dann drüberlgen (alpha wert erhöhen/verniedrigen) und mit setcolor die farbe einstelle... so einfach ist das... koplett ohne pixel lesen usw.
für transparente bilder nutze den alphachannel von png.


Ja genau so wollte ich das auch machen, allerdings leuchtet jedem ein, dass es Speicherverschwendung und auch mühsame Arbeit ist.4 Hauptcharaktere, die verschiedene Posen haben, massenweise Gegner und ebensovielen NPC´s...für jeden Charakter eine Maske anfertigen kann/will ich nicht...

Daher wollte ich die ja vom Programm erstellen lassen und danach exakt so verfahren wie du das
da erklärt hast.

Hach ich hasse es.Irgendwie kann ich mich nicht deutlich genug ausdrücken^^"


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

Xeres

Moderator

BeitragDo, Jan 28, 2010 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Masken kannst du dir von BMax erstellen lassen. Pixel einlesen, den Alpha Kanal nicht verändern, der Rest reines Weiß, abspeichern.
Arbeitsaufwand ist es nicht. Speicherverschwendung... kommt drauf an wie nötig die Effekte sind, oder ob nicht SetColor+Lightblend doch reicht.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

BladeRunner

Moderator

BeitragDo, Jan 28, 2010 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Das was in dem Video zu sehen ist sollte im Wesentlichen mit den Blitzmaxinternen Methoden zu machen sein, vorausgesetzt Du benutzt wie gesagt .png mit Alphakanal.
Also nicht Bilder bei denen eine Farbe (255,0,255 oder so) durch transparent ersetzt wird (das wäre ja bei setblend maskblend so) sondern Bilder welche einen eigenständigen Alphakanal mit Transparenzwerten haben. Sowas ist mit jedem besseren Bildeditor machbar.
Bei GIMP zB kann man eine Farbe durch Transparenz ersetzen lassen, würde sich wohl anbieten da Du deine Mediadateien ja sicher schon hast.

Ich hab hier mal eine Testdatei mit Transparenz hochgeladen:
user posted image

Wenn das gegeben ist kannst Du dein Programm mit SetBlend ALPHABLEND betreiben, woraufhin die Bilder automatisch die mitgelieferte Transparenz benutzen.
Dann ist es ein leichtes Die Farbe mittels setColor anzupassen - bei 255,255,255 wird das bild unverändert dargestellt, alle anderen Werte führen zu einer Farbverfälschung.

Ich würde Dir wie gesagt noch empfehlen SetBlend Lightblend (nur fiür die Sprites) zu testen, eventuell kommt Dir das noch entgegen.

also:
Code: [AUSKLAPPEN]
setcolor 255,255,255
Setblend alphablend
drawimage hintergrund
...
setblend lightblend
setcolor 255,0,0 'rot gefärbt
drawimage figur

Wichtig ist den Blendmode etc immer aktuell anzupassen da die bis auf Widerruf gelten.
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

BeitragDo, Jan 28, 2010 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
So ic hab das mal soweit versucht und es kommt auch ein hübscher Effekt raus, ist allerdings immernoch nicht das was ich will.

Mach ich etwas falsch?Meine Spielfigur wird trotz eingeschaltenem(oder gerade wegen?) LightBlend-Mode
transparent.

Macht auch Sinn...in der BM-Hilfe steht drin, dass beim Lightblend grundsätzlich die Pixel mit dem Backbuffer
kombiniert werden, was ja bekanntermaßen dazu führt das es durchsichtig erscheint.

Als Geistereffekt werd ich mir das schonmal vormerken, aber gibts jetzt noch ne Möglichkeit meinen
Charakter auch "nicht durchsichtig" anzeigen zu lassen?

btw.: SetAlpha habe ich auf 1.0 gesetzt, daran kanns also nicht liegen oO

MfG Ska

Edit: Ich habs mal versucht zu übermalen, aber das macht meinen Charakter allenfalls ein wenig
heller.Netter Effekt, bringt mir aber auch nix...

BladeRunner

Moderator

BeitragDo, Jan 28, 2010 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
und wenn du mit lightblend dein Figürchen 2 mal an die selbe stelle zeichnen lässt?
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

BeitragDo, Jan 28, 2010 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
und wenn du mit lightblend dein Figürchen 2 mal an die selbe stelle zeichnen lässt?


Dann passiert das was ich ihm Edit schrieb XD

Er wird heller, was auch Sinn machen würde, da es doch LightBlend heißt XD


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

BladeRunner

Moderator

BeitragDo, Jan 28, 2010 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, sonst fält mir auf anhieb nicht mehr viel ein, ausser einem wirklichen einfärben.


ARGH: EDIT
zeichne es erst mit alphablend ein und dann modeliere mit setcolor und lightblend eine zweite figur drauf
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

BeitragDo, Jan 28, 2010 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
hm, sonst fält mir auf anhieb nicht mehr viel ein, ausser einem wirklichen einfärben.


ARGH: EDIT
zeichne es erst mit alphablend ein und dann modeliere mit setcolor und lightblend eine zweite figur drauf


Hä?Das hab ich gemacht:

BlitzMax: [AUSKLAPPEN]

'den Spieler ohne Transparenz, 100% Solid(Alpha 1.0)
DrawImage player.image,player.screenX,player.screenY,player.frame

'jetzt mit Lightblend
SetBlend LIGHTBLEND

'rot einfärben
SetColor(255,0,0)
DrawImage player.image,player.screenX,player.screenY,player.frame

'alles wieder zurücksetzen
SetBlend ALPHABLEND
SetColor(255,255,255)


Gibt mir folgendes Ergebnis:

Orginal:

user posted image

Mit Lightblend:

user posted image


Wäre schade, wenn man das damit net machen könnte Sad


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

BladeRunner

Moderator

BeitragDo, Jan 28, 2010 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, der zweite hebt sich doch deutlich ab, reicht dir das nicht?
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

BeitragDo, Jan 28, 2010 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Hm, der zweite hebt sich doch deutlich ab, reicht dir das nicht?


Ähm nein XD

Wenn du dir das Video oder z.B. Rpg´s wie Vampires Dawn oder so anschaust, ist der Effekt etwas anders.
Dieser Effekt hier ist auch gut und ich werde ihn auf jeden Fall gut gebrauchen können, aber er reicht z.B.
nicht um wie bei VD Blutsaugeeffekte oder magische Effekte vernünftig darzustellen.

Dieser Effekt hier ist eher dafür geeignet mit Lichteffekten zu spielen.
Oder eben für einen Geist.Der Effekt sieht klasse aus.Genauso wie man sich sone Geistersheme vorstellt.

Also troz das es nicht das istz was ich brauche, vielen Dank, dafür^^


Ich werds dann wohl doch so machen müssen wie beanage.johannes es vorgeschlagen hat.
Auch wenn das recht ungünstig ist.Da ich dann jedes Mal vor Laden einer Karte oder einer Kampfkarte
diese Pixeleinlesung machen muss, damit ich ne passende Maskierung habe^^"

Aber solange mir nix besseres einfällt, werd ich das so machen müssen.
Es sei denn jemand hier hat noch ne andere Idee, dann wäre ich froh wenn er/sie
sie mir nicht vorenthält.

Und danke nochmal BladeRunner^^


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

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group