PNG - alphawerte ändern (Heigtmap in Normalmap.png-alpha)

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

PNG - alphawerte ändern (Heigtmap in Normalmap.png-alpha)

Beitrag von Max_der_Held »

Hallo Forum,

Ich habe leider folgendes Problem, dass ich ein png-bild mit transparenz speichern muss, aber nicht weiß, wie ich in Purebasic die tranzparenz-werte erstellen/verändern kann.

(es geht um die irrlicht-parallaxsache. Jetzt, wo ich weis, wie's geht, fehlt ein Programm zum kombinieren von Normalmaps und heightmaps.
die Heightmap muss in den Alphakanal der png-normalmap.)

bitte um hilfe.. :roll:
(es soll sozusagen eine Art konverter werden.)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich fürchte, da musst du über die API gehen, das direkt programmieren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Such mal mit der Forensuche. Irgendwo gab's ein Beispiel zur direkten Bearbeitung im Speicher. (Eventuell auch auf PureArea.net)
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ah... jetzt wo du's sagst... war das nich im englischen forum?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dige
Beiträge: 1245
Registriert: 08.09.2004 08:53

Beitrag von dige »

Wenn Du das PNG geladen hast, zunächst prüfen ob die Farbtiefe 32 Bit berägt. Wenn niocht neues Bilderstellen mit 32Bit und das PNG hineinzeichnen.

Als nächstes die DIB's holen mit GetDIBits_(..), AlphaKanal bearbeiten und
mit SetDIBit_() das ganze ins Bild zurück speichern..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

An sich ist diges Idee schon gut, aber noch schneller ist es direkt das Image im Speicher zu manipulieren. Siehe dazu Get_Object() und DIBSECTION.
Leider finde ich das Beispiel nicht mehr, da war das eigentlich sehr schön zu sehen (kann sein dass das im englischen Forum war).
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
dige
Beiträge: 1245
Registriert: 08.09.2004 08:53

Beitrag von dige »

GetDIBits_() hat den Vorteil des automatisch eine Konvertierung in die angegebene Farbtiefe durchführt. Man erhält also immer 32Bit Farbtiefe.

Mit GetObject_() muss man alle Varianten extra behandeln, oder sicherstellen
das es nur eine Farbtiefe gibt..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hab ein bissel suchen müssen, aber habs gefunden:

how do you update RGBA textures realtime in the 3DEngine?

da sollte einiges dazu drinstehen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

@dige:
Ja, das ist so ein wenig das Problem. Man müsste für LoadImage() halt einfach einen Colorformat-Parameter haben ... dann ginge das in einem. Bei vom Nutzer gewählten Bildern geht meine Methode natürlich eher weniger. Aber schneller ist GetObject_() schon, dass musst du zugeben ;).
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Antworten