gdi+を使用して画像変換。失敗?黒くなるのは?

解決


大木  2009-09-02 23:51:43  No: 70880

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


大木  2009-09-04 17:44:09  No: 70881

原因は
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の取り込みを行うことで解決しました。

応急処置のような自己解決方法ですが、
何かの参考になれば幸いです。


subaru  2009-09-04 18:58:13  No: 70882

>上記imageで存在しないパスを渡しても、
>stat = pBitmap->Save  は正常の値を返すんですね・・・

GDI+オブジェクトは例外を投げないので
ファイルの読み込みが成功したかどうかは Image::GetLastStatus で調べます。
このチェックを行わなかったためになんらかのオブジェクト自体は
構築されていて保存も成功してしまうとか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加