Seite 1 von 1

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

Verfasst: 25.10.2008 22:06
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.)

Verfasst: 25.10.2008 22:22
von Kaeru Gaman
ich fürchte, da musst du über die API gehen, das direkt programmieren.

Verfasst: 26.10.2008 20:45
von Batze
Such mal mit der Forensuche. Irgendwo gab's ein Beispiel zur direkten Bearbeitung im Speicher. (Eventuell auch auf PureArea.net)

Verfasst: 26.10.2008 21:32
von Kaeru Gaman
ah... jetzt wo du's sagst... war das nich im englischen forum?

Verfasst: 27.10.2008 10:28
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..

Verfasst: 27.10.2008 15:21
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).

Verfasst: 27.10.2008 16:56
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..

Verfasst: 27.10.2008 17:07
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...

Verfasst: 27.10.2008 23:27
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 ;).