2009-08-01 45 views
2

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

回答

3

看看FreeImage;它是一個可以在各種圖像之間轉換的庫。

您也可以嘗試ImageMagick只是來回轉換,如果你不想做任何他們。

+0

絕對同意有關的FreeImage - 對於大多數格式 – zebrabox 2009-08-01 19:10:46

0

10年前我用了愛馬仕像素轉換庫,這是非常快的。有可能將640x480 32位圖像轉換爲15或16位圖像,每秒至少30圖像。我們使用它作爲演示引擎。不幸的是,我現在找不到鏈接。在Debian軟件包是孤立的..

但是,這正是你要使用實時使用什麼..