ARGB Pixel auslesen
-
Hallo,
Ich bin relativ neu in C / C++..ich suche schon eine ganze Weile einen Codesnipsel der ein PNG oder BMP Bild ausließt und mir die ARGB Pixel Werte für jeden Pixel liefert.
Obs jetzt ein 32bit BMP oder ein PNG ist, ist mir egal, auf jedenfall brauche ich den Alpha Blend wert.
Mit RAW Images habe ich es schon hinbekommen, aber RAW kann ja leider nur RGB und nicht ARGB, soweit ich informiert bin.
Hat jemand ein Codesnipsel ala:
Öffne PNG/BMP Datei
Lese ARGB Werte in ein Array einIch wäre für jede Hilfe dankbar.
-
BMP kannst du dir selber mal schnell implentieren. In Wikipedia findet man oft die Formatdefinition. PNG ist schon etwas happiger. Versuche es mal mit
libpng
.MfG, EOutOfResources
-
Was spricht gegen eine ImageLibrary wie FreeImage?
-
Wie gesagt, ich bin noch brand junger c++ Anfänger.
Ich wäre für ein paar Code-Beispiele sehr dankbar. BMP würde mir vollkommen ausreichen.
Ich bräuchte halt einen eigenen Datentypen (kann ich erstellen), sowas wie:
ARGBPixel => red, blue, green, alphaund dann brauch ich ein Array von diesem Typen (kann ich auch)
Aber dann habe ich keine Ahnung wie ich ein BMP öffne und Pixel für Pixel auslese. Google hat mich da auch nicht viel weiter gebracht.
-
"Kann" BMP überhaupt ARGB Bilder?
-
hustbaer schrieb:
"Kann" BMP überhaupt ARGB Bilder?
Afaik kann BMP keinen AlphaChannel, aber ich lass mich gerne eines besseren belehren.
Die gängisten und wohl auch besten Formate für Spiele die einen AlphaChannel benötigen dürften targa, png und dds sein. Während ich dds nicht wirklich mag, weil es nicht nur properitär ist, sondern es haben auch viele kostenlose Programme keine Exporter dafür wie GIMP.@TE
Für was genau willst du das denn? Was willst du machen? Textur laden für OpenGL? SDL? SFML?
Sei bitte etwas genauer, dann kann ich dir besser helfen.Generell biete sich halt zum Lesen von Bildern eine ImageLibrary an wie FreeImage.
-
Ja BMP(32 bit) kann Alpha Channel.
Siehe unter anderem hier: http://en.wikipedia.org/wiki/BMP_file_format#Example_of_a_4.C3.972_Pixel.2C_32-Bit_Bitmap_with_Opacity_Values_in_the_Alpha_Channel_.28Windows_DIB_Header_BITMAPV4HEADER.29
Ich möchte ein Logo über ein anderes Bild legen.
Das Bild liegt als RGBQuad vor mit zwei For-Schleifen gehe ich jeden Pixel durch und schaue mir jeden einzelnen Pixel an.Im Moment mache ich das so: Ich lade das Logo als RAW Image (Hintergrund nicht transparent - geht ja nicht - sondern schwarz).
Dann lass ich das Logo pixel für Pixel auslesen schaue mir die Farbe des Pixels an, wenn es anders als Schwarz ist, dann wird der gleiche Pixel auf dem Quellbild mit dem Pixel des Logo-Bilds ersetzt. Da durch dass ich den Pixel aber nur ersetzen lasse, wird das übergeblendete Logo nicht gerade "sauber" deswegen möchte ich die Alpha Werte für die Berechnung der Pixelwerte hinzuziehen.
// EDIT:
Vielen Dank für den Tipp mit FreeImage...mit der DLL hab ich das gewünschte Ziel in nur wenigen Zeilen Code erreicht