閉じる

WICJpegEncoder WritePixels 0x88982f71

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ファイルの構造的な違いからこういう事になるのかなぁと。

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)