Fehler im Image Vertical-Flip?
-
Moin zusammen,
kann mir hier mal jemand helfen? Ich habe gerade einen sehr rudimentären TGA Loader geschrieben. Das Bild muss aber vertical geflippt werden. Ich habe das so gelöst. Aber irgendwo hat sich ein Fehler eingeschlichen. Aber einer bestimmten Bildgrösse raucht mir die for Schleife irgendwann ab.
Ich sehe den Fehler einfach nicht... und noch weniger verstehe ich wieso verschiedene Bildgrössen anderst funktionieren...//speicher fuer das bild bereitstellen imgDimension=imageData->imgW*imageData->imgH; imageRaw =calloc(imgDimension,imgBytes); imageFinal =calloc(imgDimension,imgBytes); fread(imageRaw,imgBytes,imgDimension,f_tgaFile); //img vertical Flip offNeg=imgDimension-imageData->imgW; for (index=0;index<imageData->imgH;index++) { for (i=0;i<imageData->imgW;i++) imageFinal[i+offNeg]=imageRaw[i+offPos]; offPos+=imageData->imgW; offNeg-=imageData->imgW; } imageData->imgData = imageFinal; free(imageRaw); imageRaw=NULL;
Eine Frage hätte ich noch zum TGA-File an sich.
Ich habe die Daten eingeladen welche in BGRA Format vorliegen. Eigentlich dachte ich ich müsste die Farben nach ARGB konvertieren, aber das war nicht der Fall! Wieso wird es richtig dargestellt?Danke,
noobie
-
benutze einen debugger, um dein programm zu untersuchen.
-
Hi,
ich habe natürlich versucht das Problem zuersteinmal mit dem Debugger einzukreisen. Sonst würde ich doch gar nicht fragen! Der Fehler entstand zwar in der for-Schleife, aber eigentlich hatte es damit gar nichts zu tun...
Von der Variable imageDimension war der Datentyp zu klein.
Ohh man... dafür habe ich 2 Tage gebraucht...Naja, egal jetzt laeufts und ich danke dir trotzdem für zumindest die theoretische Bereitschaft zu helfen
Thnx,
noobie
-
wie gross war denn imageDimension?
-
Sie war nur ein Short gross. Der Fehler lag bei mir, da ich beim erstellen gar nicht daran gedacht habe grössere Bilder als 64x64 zu laden... frag nicht was ich mir dabei gedacht habe... Kleine Datentypen->kleiner Geist?
Wie auch immer es ist jetzt ein Integer und das sollte erstmal reichen.
Aber die Frage mit dem TGA-File steht immer noch. Vorallem da ich versuche herauszufinden wie ich das Image-Description-Byte auslesen soll. Egal wie ich es auslese das Vertical-Flip Bit ist nicht gesetzt, obwohl das Bild vertical geflippt ist. Muss ich das jetzt auch vorwärts lesen oder doch rückwärts? Sehr verwirrend...
-
hast du eine ordentliche beschreibung des formats? dann wuerde sich das eventuell besser klaeren lassen.
-
mit dem tga-format hab ich mich noch nicht beschäftigt, aber vielleicht hilft dir ja dieser link weiter
http://www.wotsit.org/
da gibts auch eine tga-dokumentation.noobie schrieb:
Eigentlich dachte ich ich müsste die Farben nach ARGB konvertieren
das liegt warscheinlich an den unterschiedlichen endiansystemen von tga-dateien und cpu. motorola-cpus speichern ein 32-bit-wort in der reihenfolge
byte 0: bits 24-31 byte 1: bits 16-23 byte 2: bits 8-15 byte 3: bits 0-7
und intel-cpus in der reihenfolge
byte 0: bits 0-7 byte 1: bits 8-15 byte 2: bits 16-23 byte 3: bits 24-31
warscheinlich benutzten tga-dateien das motorola-format und deine cpu ist intel bzw umgekehrt.