なぜsouiでJPGファイルのロードに失敗したのか

3228 ワード

SOUIでデコーダを解決するのは独立したモジュールです.異なるデコーダは、プログラムにどのようなピクチャタイプをロードできるかを決定する.SComMgrを使用してSOUIのモジュールをロードする場合、debugモードでデフォルトのピクチャデコーダはimgdecoder-pngです.このデコーダはPNGピクチャしか復号できない.このデコーダをdebugバージョンのデフォルトデコーダとして使用する理由は、SOUIでAPNGアニメーションを使用することを示すためであり、このデコーダだけがAPNG復号をサポートする.他のデコーダを使用するには、SComMgrをインスタンス化するときにデコーダパラメータを1つだけ指定する必要があります.
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は,imgdecoder−pngを除いた4種類のピクチャデコーダを実現していることが分かるが,他の3つは全ピクチャフォーマットでサポートされている.したがって、SComMgr*pComMgr=new SComMgr(「imgdecoder-gdip」)のみを使用する必要があります.SComMgr*pComMgr=new SComMgr();JPGの復号化が可能です.