gdi+にて、bmpファイルからjpgファイルを作成しています。
稀(1/100〜1/300ぐらいの確率)にjpgファイルが黒一色に変換される現象が発生しています。
bmpファイル作成 226KB
↓
jpgファイル作成 約76KB
jpgファイル失敗 2KB
他に同じような現象が起こった人はいないか探しましたが、見つけられませんでした。
このような現象が起こる理由について、情報がありましたら教えてください。
stat = pBitmap->Save ( pJpg, &encoderClsid, &EncoderParams );
statは成功時も失敗時も"0"が返却されています。
gdiplus.dll
ver:5.1.3097.0
原因は
Image* pImgOrg = Image::FromFile ( pBmp ); にて、
bmpファイルを取り込んでいたのですが、
bmpファイルが使用可能状態にないにも関わらず、
bmpファイルを取り込み、ファイルのロックが行われたため、
jpgファイルがきちんと作成されなかったという結論になりました。
上記imageで存在しないパスを渡しても、
stat = pBitmap->Save は正常の値を返すんですね・・・
image取り込み失敗のためにtry catch(CException* e)を入れても
catchできなかったのが不思議ではあるのですが・・・
imageの取り込み前に、
CFile cf;
iRet = cf.openを入れて、
bmpファイルを取り込めるまで待機してから、
imageの取り込みを行うことで解決しました。
応急処置のような自己解決方法ですが、
何かの参考になれば幸いです。
>上記imageで存在しないパスを渡しても、
>stat = pBitmap->Save は正常の値を返すんですね・・・
GDI+オブジェクトは例外を投げないので
ファイルの読み込みが成功したかどうかは Image::GetLastStatus で調べます。
このチェックを行わなかったためになんらかのオブジェクト自体は
構築されていて保存も成功してしまうとか?
ツイート | ![]() |