Jump to content

  • Log In with Google      Sign In   
  • Create Account

Whats rong with this TGA-loader?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 dta1   Members   -  Reputation: 122

Like
Likes
Like

Posted 03 January 2002 - 04:55 AM

I can''t find out whats wrong typedef struct { unsigned char imageTypeCode; short int imageWidth; short int imageHeight; unsigned char bitCount; unsigned char *imageData; } TGAFILE; int LoadTGA(char *filename, TGAFILE *tgaFile) { FILE *filePtr; unsigned char ucharSkip; //Skip these short int sintSkip; long imageSize; int colorMode; // 4 = RGBA, 3 = RGB (32/24 bit) long imageIdx; // Counter unsigned char colorSwap; //Open TGA file filePtr = fopen(filename, "rb"); if(!filePtr) { filePtr = NULL; MessageBox( NULL, "\tMissing Imagefiles!", "", NULL); return 0; } // 2 Byte data we don''t need fread(&ucharSkip, sizeof(unsigned char), 1, filePtr); fread(&ucharSkip, sizeof(unsigned char), 1, filePtr); // Read image type fread(&tgaFile->imageTypeCode, sizeof(unsigned char),1,filePtr); // Validate type if ((tgaFile->imageTypeCode!=3) && (tgaFile->imageTypeCode!=2)) { fclose(filePtr); return 0; } // 13 Byte data we don''t need fread(&sintSkip, sizeof(short int),1,filePtr); fread(&sintSkip, sizeof(short int),1,filePtr); fread(&ucharSkip, sizeof(unsigned char),1,filePtr); fread(&sintSkip, sizeof(short int),1,filePtr); fread(&sintSkip, sizeof(short int),1,filePtr); // Read image size fread(&tgaFile->imageWidth, sizeof(short int),1,filePtr); fread(&tgaFile->imageHeight, sizeof(short int),1,filePtr); // Image depth fread(&tgaFile->bitCount,sizeof(unsigned char),1,filePtr); // 1 Byte we don''t need fread(&ucharSkip,sizeof(unsigned char),1,filePtr); // Color Mode colorMode = tgaFile->bitCount / 8; imageSize = tgaFile->imageWidth*tgaFile->imageHeight*colorMode; // Allocate memory tgaFile->imageData = (unsigned char*)malloc(sizeof(unsigned char)*imageSize); // Read image data fread(&tgaFile->imageData,sizeof(unsigned char),1,filePtr); // Swap BGR(A) to RGB(A) for( imageIdx = 0; imageIdx < imageSize; imageIdx += colorMode ) { colorSwap = tgaFile->imageData[imageIdx]; tgaFile->imageData[imageIdx] = tgaFile->imageData[imageIdx + 2]; tgaFile->imageData[imageIdx + 2] = colorSwap; } fclose(filePtr); return 1; // Successful Loaded TGA-file } TGAFILE *myTGA; myTGA = (TGAFILE*)malloc(sizeof(TGAFILE)); LoadTGA("x.tga", myTGA); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glRasterPos2i( 10, 10 ); glDrawPixels(myTGA->imageWidth,myTGA->imageHeight,GL_RGB,GL_UNSIGNED_BYTE,myTGA->imageData);

Sponsor:

#2 Aprosenf   Members   -  Reputation: 372

Like
Likes
Like

Posted 03 January 2002 - 09:42 AM

quote:

// Read image data
fread(&tgaFile->imageData, sizeof(unsigned char), 1, filePtr);


You''re only reading in one byte of the actual image data. Change that line to this:
  
fread(&tgaFile->imageData, sizeof(unsigned char), imageSize, filePtr);

You should also remember to free the memory in imageFile before you load another targa using the same structure, and when you''re program is finished.

#3 Anonymous Poster_Anonymous Poster_*   Guests   -  Reputation:

Likes

Posted 04 January 2002 - 12:27 AM

Thet help much

But I still get an access violation on the colorSwap part,

// Swap BGR(A) to RGB(A)
for( imageIdx = 0; imageIdx < imageSize; imageIdx += colorMode )
{
colorSwap = tgaFile->imageData[imageIdx]; // access violation
tgaFile->imageData[imageIdx] = tgaFile->imageData[imageIdx + 2];
tgaFile->imageData[imageIdx + 2] = colorSwap;
}




#4 Anonymous Poster_Anonymous Poster_*   Guests   -  Reputation:

Likes

Posted 04 January 2002 - 08:32 AM

You are taking the address of tgaFile->imageData:

fread(&tgaFile->imageData, sizeof(unsigned char), imageSize, filePtr);
^

Should have:

fread(tgaFile->imageData, sizeof(unsigned char), imageSize, filePtr);
^

#5 dta1   Members   -  Reputation: 122

Like
Likes
Like

Posted 06 January 2002 - 05:09 AM

Of course
Thank you






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS