019
23.08.2006, 13:30 Uhr
Yadgar
|
High!
Zitat von ~Blubber2063: |
Vermutlich wirst du hier doch noch Code veröffentlichen müssen damit man den Fehler sehen kann
|
Voilà:
C++: |
while (!input.eof()) { if (i >= 17) { n=i-17; // Gelesene Bytes ab Beginn des Datenteils pn = xsize*y+x; // Nummer des aktuellen Pixels if (n>0 && !(n%p_byte)) x++; if (n>0 && !(n%(xsize*p_byte))) { x=0; y++; } switch(n%p_byte) { case 0: b=ch; break; case 1: g=ch; break; case 2: r=ch; picture.setPixel(x, y, b, g, r); #ifdef TEST p++; if (flag && pn<=xsize*ysize) { cout << pn << "\t\t\t<" << (unsigned short)r <<", " << (unsigned short)g << ", " << (unsigned short)b << ">\n"; if (pn>0 && !(pn%20)) flag=weiter(); } #endif break; case 3: ; // vorerst leer, wird bei späterer Implementierung einer Klasse für // 32bit-Pixel berücksichtigt! break; } } // if (!i) cout << "Beginn des Datenteils!" << endl; i++; } #ifdef TEST cout << p << " Pixel eingelesen!" << endl; cout << "Daten im Objekt \"Image\": " << endl; picture.pDisplay(); #endif
|
Zur Erklärung:
ch: aus dem TGA-File eingelesenes Roh-Datum, vom Typ signed char p_byte: Anzahl der Bytes pro Pixel, entspricht dem Wert in Byte 16 des TGA-Files (Bits pro Pixel) geteilt durch 8 x_size, y_size: Breite und Höhe der Bilddatei in Pixeln, wird aus Bytes 12 bis 15 des TGA-Files ausgelesen x, y: Indexwerte für das in der Klasse "Image" enthaltene Feld aus "Pixel"-Objekten picture: Objekt der Klasse "Image", repräsentiert das gesamte Bild und besteht gegenwärtig hauptsächlich aus einem zweidimensionalen Feld von Objekten der Klasse Pixel p: Zähler für eingelesene Pixel (überflüssig, da pn den gleichen Zweck erfüllt) b, g, r: Farbwerte für blau, grün und rot (die in TGA übliche Reihenfolge) flag: bool-Variable, gibt an, ob die Abfrage in der Hilfsfunktion weiter() zur Unterbrechung der Pixelwert-Ausgabe nach jeweils 20 Zeilen mit ja (true) oder nein (false) beantwortet wurde pDisplay: Methode von Image, die die eingelesenen und als Pixel-Feld organisierten Rohdaten ausgibt
Falls dieses Codeteil nicht ausreicht, um den Fehler zu finden, mailt mich doch privat an (yazdegird@gmx.de), ich schicke euch dann den vollständigen Code (und das als PNG komprimierte TGA zum Testen!)...
Bis bald im Khyberspace!
Yadgar -- Flagmaker - ein Programmier-Blog Dieser Post wurde am 23.08.2006 um 13:33 Uhr von Yadgar editiert. |