int targa_loadFromFile(Targa *targa, char *filename) { int rc = 0; int fileLength = 0; unsigned char *buffer = NULL; FILE *fh = NULL; if((targa == NULL) || (filename == NULL)) { fprintf(stderr, "[%s():%i] error - invalid or missing argument(s).\n", __FUNCTION__, __LINE__); return -1; } if((fh = fopen(filename, "r+b")) == NULL) { return targaErrorf(); } if((rc = fseek(fh, 0, SEEK_END)) != 0) { return targaErrorf(); } if((fileLength = ftell(fh)) < 0) { return targaErrorf(); } if((rc = fseek(fh, 0, SEEK_SET)) != 0) { return targaErrorf(); } if(fileLength < 18) { fprintf(stderr, "error - TGA file '%s' length %i invalid.\n", filename, fileLength); fclose(fh); return -1; } buffer = (unsigned char *)malloc(sizeof(unsigned char) * fileLength); memset(buffer, 0, (sizeof(unsigned char) * fileLength)); rc = (int)fread((char *)buffer, sizeof(char), fileLength, fh); if(rc != fileLength) { return targaErrorf(); } fclose(fh); rc = targa_loadFromData(targa, buffer, fileLength); free(buffer); return rc; }
bool ImageLoaderTGA::ReadData() { Targa tga; if (targa_loadFromData(&tga, m_RawData, m_NumRawDataBytes) < 0) { return false; } m_Width = tga.width; m_Height = tga.height; assert(static_cast<uint32>(tga.imageLength) == m_Width * m_Height * 4); return LoadFromPixelBuffer(reinterpret_cast<uint32 *>(tga.image), true); }