BOOL ReadImage(CImage* pcImage, char* szFilename, EImageType eType)
{
	if (eType == IT_Unknown)
	{
		eType = GuessImageType(szFilename);
	}

	//Oi! Check to make sure none of the below expect an initialised image.
	switch (eType)
	{
		case IT_BMP:
		case IT_EMF:
		case IT_GIF:
		case IT_ICO:
		case IT_JPG:
		case IT_WMF:
			// uses OLE and IPicture to load these image formats.
			return (LoadPictureIPicture(pcImage, szFilename));
		case IT_TGA:
			return (LoadTGA(pcImage, szFilename)); // uses NeHe TGA routines.
		case IT_PNG:
			return (LoadPNG(pcImage, szFilename));
		case IT_RAD:
			return (LoadRAD(pcImage, szFilename)); // uses a text-format RAW descriptor (RAD) file to load a raw file.
		case IT_RAW:
			return (LoadRAW(pcImage, szFilename)); // special case assuming an initialised image.
	}
	return FALSE;
}
Ejemplo n.º 2
0
Image* TGAImageDecoder::Decode(DataStream* ds) {
    TGAHeader header;
    if (!LoadHeader(&header, ds)) return 0;
    ImageFormat fmt = IMAGE_FORMAT_UNKNOWN;
    if (header.bitsperpixel==32)
        fmt = IMAGE_FORMAT_RGBA;
    else if(header.bitsperpixel==24)
        fmt = IMAGE_FORMAT_RGB;
    else if (header.bitsperpixel==8)
        fmt = IMAGE_FORMAT_GRAY;

    bool rle = (header.datatypecode & 8)!=0;
    UInt32 width = header.width;
    UInt32 height = header.height;
    ImageImpl* img = new ImageImpl(width,height,fmt);
    bool res = rle ? LoadRLE(ds,img) : LoadRAW(ds,img);
    if (!res) {
        delete img;
        img = 0;
    } else {
        img->SwapChannelsRB();
        if ( (header.imagedescriptor & 0x20 ) == 0) {
            img->FlipV();
        }
    }
    return img;
}