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

Graphicsメソッドで作成した図形の保存方法

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

はじめての書き込みですが、よろしくお願いします。
Graphicsメソッドでフォーム上に図形を描いた場合
その図形をbmpやjpg形式で保存したいのですが
方法がわかりません。
具体的には、以下のようなコードで実行していますが
保存された画像には、線が描かれていません。
根本的な勘違いだと思うのですが、ご教授よろしくお願いいたします。

Private Sub form1_paint(ByVal sender As Object, ByVal e As
 System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
e.Graphics.DrawLine(Pens.Black, 10, 10, 100, 100)
PictureBox1.Image.Save("C:\test.png",
          System.Drawing.Imaging.ImageFormat.Png)

End Sub
ずばりな話題がここのTipsにあります。

PictureBoxのImageプロパティに関するよくある勘違い
http://dobon.net/vb/dotnet/graphics/pictureboximageanddrawimage.html
■No13247に返信(よねKENさんの記事)
> ずばりな話題がここのTipsにあります。
>
> PictureBoxのImageプロパティに関するよくある勘違い
> http://dobon.net/vb/dotnet/graphics/pictureboximageanddrawimage.html

よねKENさん、ありがとうございます。
すでにそこのTipsは読んだ上での質問でした。
やはり、imageじゃないと図形の保存はできないってことなのでしょうか。
Tipsには注意として、徹底して図形を扱うならGraphicsメソッドを使ったほうがよいとありましたので、私もなるべくそうしたいと考えています。
可か不可という答えですと、どちらでしょう。
お分かりの方、よろしくお願いします
> やはり、imageじゃないと図形の保存はできないってことなのでしょうか。

質問の意味(意図)がわかりません(^^;

>PictureBox1.Image.Save("C:\test.png",
          System.Drawing.Imaging.ImageFormat.Png)

vb小僧さんの提示されたコードではImageプロパティから返される
Imageオブジェクトを使って画像を保存しようとしてますよね。
ImageオブジェクトでSaveするので何かまずいのでしょうか?
問題の焦点はそこではないと思います。

> Tipsには注意として、徹底して図形を扱うならGraphicsメソッドを使ったほうがよいとありましたので、私もなるべくそうしたいと考えています。
> 可か不可という答えですと、どちらでしょう。

何について可/不可を尋ねられているのか理解できませんでした。
Graphicsオブジェクトで描く、Imageオブジェクトで保存する、
という流れで目的のことができます。

提示のソースコードでは、描いている画像と
保存している画像が無関係のものなので、
vb小僧さんが描いたと思っている線は保存されません。
その点の誤解について書かれている記事が私の提示したTipsです。

ポイントは、「e.Graphicsで描く先のキャンバス」と
「PictureBox1.Imageプロパティというキャンバス」は無関係だと
いうことです。
よねKENさん、早速の回答ありがとうございます。

的を得ていない質問で申し訳ありません。
graphicsとimageでは対象が違うというのは解っていたつもりですが
まだ混同している点があるようです。

もうすこし、じっくり取り組んでみます。
ありがとうございました。
単純に考えれば、指定したGraphicsに図形を描画するメソッドを用意し、それをPaintイベントハンドラから呼び出し、保存する時はImageのGraphicsを指定してそのメソッドを呼び出してから保存すればよいのではないでしょうか?

または、こんな方法もあります。

DOBON.NET .NET Tips - ピクチャボックスに表示されている画像を取得する
http://dobon.net/vb/dotnet/graphics/invokepaint.html

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