GIF画像の例外 – プログラミング – Home

通知
すべてクリア

[解決済] GIF画像の例外

固定ページ 1 / 2

アップル
 アップル
(@アップル)
ゲスト
結合: 24年前
投稿: 8
Topic starter  

GDI+のDrawImageでGIF画像の描画を行うと、
「例外処理 (初回) は HOGE.exe (GDIPLUS.DLL) にあります: 0xC0000005: Access
Violation」
というメッセージが発生します。

Debug/Release共に、描画は正常にできていて強制終了することはありませんが
メッセージがでないようにしたいと思っています。
BMP/JPEG/TIFFでは上記のようなメッセージはでずに描画されます。
GDI+の不具合でしょうか?

なにかご存知の方、いらっしゃいますでしょうか?

描画のソースです->
Bitmap* pImage;
Graphics cGraphics(dc.m_hDC);

//画像ファイル読み込み
pImage = Bitmap::FromFile(Lファイルパス,TRUE);

//アンチエイリアス有効化
cGraphics.SetSmoothingMode(SmoothingModeAntiAlias);

//画像表示
cGraphics.DrawImage(pImage,
rect.left - rectWindow.left,
rect.top - rectWindow.top,
rect.Width(),
rect.Height());

環境:VisualStadio6.0 MFC使用


引用未解決
トピックタグ
アップル
 アップル
(@アップル)
ゲスト
結合: 24年前
投稿: 8
Topic starter  

すいません、途中で投稿してしまいました。

Bitmap* pImage;
Graphics cGraphics(dc.m_hDC);

//画像ファイル読み込み
pImage = Bitmap::FromFile(Lファイルパス,TRUE);

//アンチエイリアス有効化
cGraphics.SetSmoothingMode(SmoothingModeAntiAlias);

//画像表示
cGraphics.DrawImage(pImage,
0,
0,
rect.Width(),
rect.Height());


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

うーん。
動いているから自分のプログラムの不具合では無いと言う判断は
適切では無いと思いますよ。
むしろ一見ちゃんと動いているように見えて裏ではメモリを壊してるとか
そういう不具合の方がよっぽど性質が悪いです。
容易には見つからないので、リリース後に発覚して青くなるなんて事も
ありますし。
場合によっては殆どアクロバットと行っても良いような綱渡りで
一見うまく動いているように見えている事もありますよ。(>_<)

例外と言うからには想定外の状況が起きていると言う事ですから
ちゃんと原因を究明して本当に影響の無い例外なのかを突き止めるべきです。
それがはっきりするまではアプリケーションその物がグレーと言う事になります。


返信引用
アップル
 アップル
(@アップル)
ゲスト
結合: 24年前
投稿: 8
Topic starter  

PATIO様、ありがとうございます。

>例外と言うからには想定外の状況が起きていると言う事ですから
>ちゃんと原因を究明して本当に影響の無い例外なのかを突き止めるべきです。
原因を突き止めたいのですが、情報がなくて...

なんとか以下のサイトを発見しました。
https://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?
FeedbackID=364417
VC2008でも同じような現状が報告されていますが、フィードバックされていません。

どんな情報でも良いのでお持ちの方いらっしゃいましたらお願い致します。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

現状で何とか探ろうと思ったらコードを少しずつ削って
例外が出なくなるところまで頑張ってみるとかしか
思いつかないです。
例外が出ているのがGDIPLUSの部分なら
削ってみる部分もGDIPLUSの部分に絞り込めそうです。
コンパイルが通るように辻褄を合わせながら
コードをコメントアウトして行く事になるので
面倒ですけれど、仕方が有りません。

他にもっと簡単な方法があれば良いのですけれど。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

> 原因を突き止めたいのですが、情報がなくて...
> なんとか以下のサイトを発見しました。
> VC2008でも同じような現状が報告されていますが、フィードバックされていません。
フィードバックされるのを待つのも一つの手ですね。
フリーソフト等でGIF→JPEG変換のツールなんかでてますから
 JPEGに変換してアプリを動かす。
のも一つの手ですね。
ただ、PATIOさんの意見どおり、
   「なら、GIF以外にすればすべてうまくいくのか?」
ということをきちんと調べておかないとまずいと思います。
どこかに落とし穴がないか一つ一つ調べてみる必要があると思います。


返信引用
アップル
 アップル
(@アップル)
ゲスト
結合: 24年前
投稿: 8
Topic starter  

ありがとうございます。

JPEGにすることも考えてみます。

解決とさせて頂きます。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

> JPEGにすることも考えてみます。
> 解決とさせて頂きます。
 解決ですか?
 本当にJPEGで大丈夫ですか?
 PATIOさんの意見も読んで、一つ一つデバッグしてみて下さい。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

「バグは解消し、問題が解決した」
ではなく
今後どう対策していくのか(JPEGにすればすむのか、フィードバックを待つか…etc)
わからないので、とりあえずこの質問スレッドを閉じるために
解決ボタンを押しました

って意味じゃないのな?

技術的な解決じゃないといやだって質問もあれば、
問題は回避できればいい、それよりも作りたいアプリケーションの完成が第一希望
って質問もあると思う


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

> 技術的な解決じゃないといやだって質問もあれば、
> 問題は回避できればいい、それよりも作りたいアプリケーションの完成が第一希望
> って質問もあると思う
了解です。
そうですね、様子を見ます。


返信引用
アップル
 アップル
(@アップル)
ゲスト
結合: 24年前
投稿: 8
Topic starter  

>今後どう対策していくのか(JPEGにすればすむのか、フィードバックを待つか…etc)
>わからないので、とりあえずこの質問スレッドを閉じるために
>解決ボタンを押しました
おっしゃるとおりです。
後は自分でなんとかするしかなさそうでしたので
解決とさせて頂きました。

ありがとうございました。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>なんとか以下のサイトを発見しました。
> https://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?
>FeedbackID=364417
>VC2008でも同じような現状が報告されていますが、フィードバックされていません。

回答ではありませんが私の環境でも以下の手順で症状を確認できました。

1.スタートメニューからペイントを起動する。
2.VC++で「ツール」→「プロセスにアタッチ」を選択する。
3.mspaint.exeにアタッチする。
4.ペイントの「ファイル」→「開く」でGIFファイルを開く。
#Windows Vista SP1+Visual C++ 2008 Express Editionで確認

この手順でGIFファイルを開くたびに、リンク先と同様の例外メッセージが
デバッグペインに出力されます。

仕様なのか不具合なのかわかりませんが
OS標準のツールでも確認できるくらいだから
技術的にどうこうで解決する問題じゃないでしょうね。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

なるほど、subaruさんのRESでようやく意味が分かりました。

デバッグウィンドウに[例外処理]のメッセージがでているだけ
と言うことですね。
それなら無視してもいい気がします。

例外処理をしたのに異常終了しないということは、
GDI+の中で try...catch してるということであり、
その結果、問題なしと判断したから、事後の処理を続行させて
いるのでしょう。
仕様とみなしてよいと思います。

(例) 以下のコードで、C:\1.txtが書き込み禁止だとすると、
TRY...CATCH がないと異常終了します
TRY
{
CFileStatus Status;
CFile::GetStatus(_T(C:\\1.txt), Status);
:
CFile::SetStatus(_T(C:\\1.txt), Status);
} CATCH(CFileException, e) {
} END_CATCH;

しかし、そのことを承知した上で、書き込み禁止でなければ、
Statusを書き換えたいということなら、上記のコードでいいわけです。
そして、その場合、正常系であっても、例外が発生することは
避けられないわけです。


返信引用
アップル
 アップル
(@アップル)
ゲスト
結合: 24年前
投稿: 8
Topic starter  

subaru様、bun様、ありがとうございます。

メッセージだけで、強制終了等の問題が
ないようでしたら、このままでいこうと思います。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

解決済みですが、サポート情報出てました。
http://support.microsoft.com/kb/961889/ja


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました