我有一些內存中的圖像以各種簡單的格式,我需要快速轉換爲另一種格式。如果目標格式包含一個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