DOBON.NET DOBON.NETプログラミング掲示板過去ログ

メタファイルの読み込み

環境/言語:[VB.NET]
分類:[.NET]

はじめまして。VB6からVB.NETに移行を始めたばかりの初心者です。
こちらのTipsを参考にPictureBoxにメタファイルを読み込もうとして
いるのですが、下記のエラーが出て困っています。

「'System.Runtime.InteropServices.ExternalException' の
ハンドルされていない例外が system.drawing.dll で発生しました。

追加情報 : GDI+ で一般的なエラーが発生しました。」

プログラムは以下の通りです。

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'Metafileオブジェクトの作成(画像ファイルを読み込む)
Dim metafile As New Imaging.Metafile("D:\MyProjects.NET\TEST_vsDraw4\bin\TEST1.WMF")
'PictureBox1のGraphicsオブジェクトの作成
Dim g As Graphics = PictureBox1.CreateGraphics()
'画像の描画
g.DrawImage(metafile, 60, 10)
'MetafileとGraphicsオブジェクトを破棄
metafile.Dispose()
g.Dispose()
End Sub

↑Dim metafile As New Imaging.Metafile("D:\MyProjects.NET\TEST_vsDraw4\bin\TEST1.WMF")の行で冒頭のエラーが発生します。

メタファイル自体はグレープシティ(旧文化オリエント)社のVSVIEW6で
作成したもので、WindowsXPのビューアでは正常に表示されますし、
VB.NETのフォームデザイナでPictureBoxのImageプロパティに直接指定
しても問題なく表示されます。

どなたか、ご教授をお願い致します。
■No5875に返信(なるさんの記事)
> はじめまして。VB6からVB.NETに移行を始めたばかりの初心者です。
> こちらのTipsを参考にPictureBoxにメタファイルを読み込もうとして
> いるのですが、下記のエラーが出て困っています。
>
> 「'System.Runtime.InteropServices.ExternalException' の
> ハンドルされていない例外が system.drawing.dll で発生しました。
>
> 追加情報 : GDI+ で一般的なエラーが発生しました。」
>
> プログラムは以下の通りです。
>
> Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
> 'Metafileオブジェクトの作成(画像ファイルを読み込む)
> Dim metafile As New Imaging.Metafile("D:\MyProjects.NET\TEST_vsDraw4\bin\TEST1.WMF")
> 'PictureBox1のGraphicsオブジェクトの作成
> Dim g As Graphics = PictureBox1.CreateGraphics()
> '画像の描画
> g.DrawImage(metafile, 60, 10)
> 'MetafileとGraphicsオブジェクトを破棄
> metafile.Dispose()
> g.Dispose()
> End Sub
>
> ↑Dim metafile As New Imaging.Metafile("D:\MyProjects.NET\TEST_vsDraw4\bin\TEST1.WMF")の行で冒頭のエラーが発生します。
>
> メタファイル自体はグレープシティ(旧文化オリエント)社のVSVIEW6で
> 作成したもので、WindowsXPのビューアでは正常に表示されますし、
> VB.NETのフォームデザイナでPictureBoxのImageプロパティに直接指定
> しても問題なく表示されます。
>
> どなたか、ご教授をお願い致します。

  環境に何か問題があるのか・・・
  私の環境では、問題なく動作しました。

  ただ、VS-Viewは持っていないので、Windowsに添付のサンプルの
  WMFと、Officeに添付のものを使いました。

※ g.Dispose() したら、PictureBoxに表示されませんでしたので、
  コメントアウトしました。

  一度、VSーView以外のメタファイルを使用してみて下さい。
  メタファイルには、2種類あり、拡張メタファイルでも問題ない
  と思いますが、Windows上では、使用されるWin32 API が違います
  ので・・・尚、VS-Viewが、拡張メタを吐くのかについては解りま
  せんので・・・

以上。
岡田さま。お返事ありがとうございます。
わざわざプログラムをテストしていただいたようで嬉しいです(*^^*)

ご指摘の通り、VS-VIEW以外のメタファイルでテストしたところ、
問題なく動作したので、VS-VIEWでもメタファイルを再生成して
みたところ問題なく動作しました。

どうやら、VS-VIEWでのメタファイルが生成が不完全または破損
していたようです。お騒がせして申し訳ありませんでした。

> ※ g.Dispose() したら、PictureBoxに表示されませんでしたので、
>   コメントアウトしました。

私の環境ではg.Dispose()はコメントアウトしなくてもPictureBoxに
表示されますよ。他のウィンドウの裏に隠れてしまうと消えてしまう
のはg.Dispose()があってもなくても同じですよね。

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板