我有一些内存中的图像以各种简单的格式,我需要快速转换为另一种格式。如果目标格式包含一个alpha通道,但是该通道没有,alpha应该被视为其全部值(例如,8位目标alpha通道的0xFF)。C++快速的图像格式转换方式
我需要能够处理各种格式,比如A8R8G8B8,R8G8B8A8,A1R4G4B4,R5G6B5等像素的任何这些格式之间
转换简单,但是我不希望有为了手动编码每一个组合,我也不希望在转换为最终格式之前转换为通用格式(例如A8R8G8B8)的2遍解决方案,因为性能原因,如果我想使用更高版本高清格式,说A16B16G16R16否则真不如浮点无论是宽松一些数据转换为中间格式,或不得不重写一切使用不同的高清晰度格式...
井盟友ID像是某种枚举与每种格式的值,然后转换成一个单一的方法,例如说
enum ImageFormat
{
FMT_A8R8G8B8,//32bit
FMT_A1R4G4B4,//16bit
FMT_R5G6B5,//16bit
FMT_A32R32G32B32F,//128bit floating point format
...
};
struct Image
{
ImageFormat Format;
size_t Width, Height;
size_t Pitch;
void *Data;
};
Image *ConvertImage(ImageFormat *targetFormat, const Image *sourceImage);
绝对同意有关的FreeImage - 对于大多数格式 – zebrabox 2009-08-01 19:10:46