画像フォーマットの変更 [GDI+]

(2004.03.25)
                  static HRESULT ConvertPicture(IStreamPtr spSrcStream, IStreamPtr spDestStream, const WCHAR format, EncoderParameters pEncoderParameters = NULL)
    {
        CLSID clsid;
        int nRet = GetEncoderClsid(format, &clsid);
        if (nRet == -1)
        {
            return E_FAIL;
        }
 
        Status stat = Ok;
 
        Image image = new Image(spSrcStream);
        if (image == NULL)
        {
            return E_FAIL;
        }
 
        stat = image-GetLastStatus();
        if (stat != Ok)
        {
            delete image;
            return E_FAIL;
        }
 
        if (pEncoderParameters == NULL)
        {
            stat = image-Save(spDestStream, &clsid);
            if (stat != Ok)
            {
                delete image;
                return E_FAIL;
            }
        }
        else
        {
            stat = image-Save(spDestStream, &clsid, pEncoderParameters);
            if (stat != Ok)
            {
                delete image;
                return E_FAIL;
            }
        }
 
        delete image;
        return S_OK;
    }
 
    // GDI+のヘルプからコピー
    static int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
    {
        UINT  num = 0;          // number of image encoders
        UINT  size = 0;         // size of the image encoder array in bytes
 
        ImageCodecInfo* pImageCodecInfo = NULL;
 
        GetImageEncodersSize(&num, &size);
        if(size == 0)
            return -1;  // Failure
 
        pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
        if(pImageCodecInfo == NULL)
            return -1;  // Failure
 
        GetImageEncoders(num, size, pImageCodecInfo);
 
        for(UINT j = 0; j < num; ++j)
        {
            if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
            {
                *pClsid = pImageCodecInfo[j].Clsid;
                free(pImageCodecInfo);
                return j;  // Success
            }    
        }
 
        free(pImageCodecInfo);
        return -1;  // Failure
    }
一覧に戻る
© 2003 WAC.com All Right Reserved.