Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

dta1

Whats rong with this TGA-loader?

This topic is 6037 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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);

Share this post


Link to post
Share on other sites
Advertisement
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.

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
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;
}


Share this post


Link to post
Share on other sites
Guest Anonymous Poster
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);
^

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!