WICにて JPEGファイルを保存しようとして件のエラーに。
エラーコード的には WINCODEC_ERR_STREAMWRITEになるのだけど、同様のコードで BMPは問題なく、JPEGでもエラーが出るときと出ないときがある。
_COM_SMARTPTR_TYPEDEF(IWICBitmapEncoder,__uuidof(IWICBitmapEncoder));
HRESULT result;
IWICBitmapEncoderPtr Encoder;
if(SUCCEEDED(result=Encoder.CreateInstance(CLSID_WICJpegEncoder))){
// …
}
いろいろ試した結果、IWICBitmapEncoderのオブジェクトを直接作成するのではなく IWICImagingFactoryにContainerを食わせて間接的に作成するとうまくいくことがわかった。
_COM_SMARTPTR_TYPEDEF(IWICImagingFactory,__uuidof(IWICImagingFactory));
_COM_SMARTPTR_TYPEDEF(IWICBitmapEncoder,__uuidof(IWICBitmapEncoder));
HRESULT result;
IWICImagingFactoryPtr ImagingFactory;
ImagingFactory.CreateInstance(CLSID_WICImagingFactory);
IWICBitmapEncoderPtr Encoder;
if(SUCCEEDED(result=ImagingFactory->CreateEncoder(GUID_ContainerFormatJpeg,NULL,&Encoder))){
// …
}
わかってしまえば、BMPファイルと JPEGファイルの構造的な違いからこういう事になるのかなぁと。