Exemple #1
0
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;
}
Exemple #2
0
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);
}