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

Graphicsオブジェクトをビットマップで保存するには?

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

    



Declare Function GetDC Lib "user32.dll" _
(ByVal hWnd As Integer) As IntPtr
Graphicsオブジェクトに色々書き込んでそれを画像として
mydocumentに保存したい場合どのような処理を行えばよいのか教えてください。




Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim a As Graphics = Graphics.FromHdc(GetDC(0))
Dim hdc As IntPtr = a.GetHdc
Dim newGraphics As Graphics = Graphics.FromHdc(hdc)
newGraphics.DrawRectangle(New Pen(Color.Red, 3), 0, 0, 200, 100)


End Sub
新しいBitmapを作成し、そこにBitBltなどでコピーしてください。

DOBON.NET .NET Tips - 画面をキャプチャする
http://dobon.net/vb/dotnet/graphics/screencapture.html
2006/02/27(Mon) 23:36:00 編集(投稿者)
2006/02/27(Mon) 23:24:30 編集(投稿者)

ケンさんこんばんは。掲示板のみなさん,はじめまして,YASと申します。
よろしくお願いします。

GetDC(0)ということはスクリーンに描画して,それを保存したいのですね。
スクリーンと同じ大きさのビットマップを用意して,そこにコピーする
のが簡単だと思います。
具体的には下のようなコードになると思います。(VB2005です)

Dim Image As Image = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Dim graph As Graphics = Graphics.FromImage(Image)
graph.CopyFromScreen(New Point(0, 0), New Point(0, 0), Screen.PrimaryScreen.Bounds.Size)
Image.Save(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\image.bmp")

蛇足ですが,デバイスコンテキストハンドルは取得したら解放しないといけないと思います。

管理人さんへ
私はいつも上のやり方をするのですが,Tipsにはありませんでした。
このやり方は異端なのでしょうか。簡単だと思うんですけど...
> 私はいつも上のやり方をするのですが,Tipsにはありませんでした。
> このやり方は異端なのでしょうか。簡単だと思うんですけど...

.NET Framework 2.0ではその方がいいですね。私のサイトではまだ2.0に追いついてなく、申し訳ありません。
ありがとうございました。
大変役に立ちました。
解決済み!

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