在SOUI中解決解碼器是一個獨立的模塊。
不同的解碼器決定了程序中能夠加載什么樣的圖片類型。
使用SComMgr來加載SOUI的模塊時,debug模式下默認的圖片解碼器是imgdecoder-png。這個解碼器只能解碼PNG圖片。至於為什么用這個解碼器作為debug版本的默認解碼器是為了演示在SOUI中使用APNG動畫,只有這個解碼器支持APNG解碼。
要使用其它解碼器只需要在實例化SComMgr時提供一個解碼器參數就行:
class SComMgr { public: SComMgr(LPCTSTR pszImgDecoder = NULL) { if(pszImgDecoder) m_strImgDecoder = pszImgDecoder; else m_strImgDecoder = COM_IMGDECODER; } BOOL CreateImgDecoder(IObjRef ** ppObj) { if(m_strImgDecoder == _T("imgdecoder-wic")) return SOUI::IMGDECODOR_WIC::SCreateInstance(ppObj); else if(m_strImgDecoder == _T("imgdecoder-stb")) return SOUI::IMGDECODOR_STB::SCreateInstance(ppObj); else if(m_strImgDecoder == _T("imgdecoder-png")) return SOUI::IMGDECODOR_PNG::SCreateInstance(ppObj); else if(m_strImgDecoder == _T("imgdecoder-gdip")) return SOUI::IMGDECODOR_GDIP::SCreateInstance(ppObj); else { SASSERT(0); return FALSE; } } //... }
可以看出SOUI實現了4種圖片解碼器,除了imgdecoder-png外,其它3個都是全圖片格式支持的。
因此只需要使用
SComMgr *pComMgr = new SComMgr("imgdecoder-gdip");
代替
SComMgr *pComMgr = new SComMgr();
即可實現JPG的解碼。
