int SImgX_WIC::_DoDecode( IWICBitmapDecoder * pDecoder ) { SASSERT(m_uImgCount == 0); IWICImagingFactory* factory = SImgDecoderFactory_WIC::s_wicImgFactory; CAutoRefPtr<IWICFormatConverter> converter; if(FAILED(factory->CreateFormatConverter(&converter))) return 0; if(FAILED(pDecoder->GetFrameCount(&m_uImgCount))) return 0; m_pImgArray = new SImgFrame_WIC[m_uImgCount]; for(UINT i = 0; i< m_uImgCount ;i++) { CAutoRefPtr<IWICBitmapFrameDecode> frame; if(SUCCEEDED(pDecoder->GetFrame(i,&frame))) { // CAutoRefPtr<IWICMetadataQueryReader> pMetaReader; // pDecoder->GetMetadataQueryReader(&pMetaReader); // if(pMetaReader) // { // PROPVARIANT propValue; // PropVariantInit(&propValue); // HRESULT hr=pMetaReader->GetMetadataByName(L"/grctlext/Delay", &propValue); // if(SUCCEEDED(hr)) // { // m_pImgArray[i].SetFrameDelay(propValue.intVal); // } // PropVariantClear(&propValue); // } converter->Initialize(frame, m_bPremultiplied?GUID_WICPixelFormat32bppPBGRA:GUID_WICPixelFormat32bppBGRA, WICBitmapDitherTypeNone,NULL, 0.f,WICBitmapPaletteTypeCustom); CAutoRefPtr<IWICBitmapSource> bmp; converter->QueryInterface(IID_PPV_ARGS(&bmp)); m_pImgArray[i].SetWICBitmapSource(bmp); } } return m_uImgCount; }