質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

1609閲覧

フォームの一部をキャプチャする

sake

総合スコア57

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/11/13 17:57

VB.NET2010でフォームの一部をキャプチャするプログラムを作りましたが、入力したデータやラベルの文字が表示できません。

VB.net

1 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 2 'コントロールの外観を描画するBitmapの作成 3 Dim bmp1 As New Bitmap(Me.Width, Me.Height) 4 Me.DrawToBitmap(bmp1, New Rectangle(0, 0, Me.Width, Me.Height)) 5 6 '画像を切り抜く 7 Dim bmpcut As New Rectangle(709, 185, 435, 366) 8 Dim bmp2 As Bitmap = bmp1.Clone(bmpcut, bmp1.PixelFormat) 9 '画像の保存 10 bmp2.Save("C:\Users\Public\test.jpg") 11 '後始末 12 bmp1.Dispose() 13 bmp2.Dispose() 14End Sub

期待する画像
取得できた画像
上の画像を期待したのですが、取得できたのは下の画像でした。
VB.NETでは無理なのでしょうか?
また、他の方法があるのでしょうか?
何方か力を貸してください。お願いします。

環境
Windows10
Microsoft Visual Studio 2010

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

DrawToBitmap は WM_PRINT メッセージを送って描画するので、
コントロールの実装によっては、表示と異なってしまう可能性があります。

表示どおりにキャプチャするなら、以下のような Function を作成して

VB

1Imports System.Runtime.InteropServices 2 3Class FormUtil 4 5 Private Const SRCCOPY As Integer = &HCC0020 6 7 <DllImport("gdi32.dll")> 8 Private Shared Function BitBlt(ByVal hdc As IntPtr, 9 ByVal nXDest As Integer, 10 ByVal nYDest As Integer, 11 ByVal nWidth As Integer, 12 ByVal nHeight As Integer, 13 ByVal hdcSrc As IntPtr, 14 ByVal nXSrc As Integer, 15 ByVal nYSrc As Integer, 16 ByVal dwRop As Integer) As Boolean 17 End Function 18 19 Public Shared Function CreateClientBitmap(ByVal con As Control, ByVal rect As Rectangle) As Bitmap 20 Dim bmp As New Bitmap(rect.Width, rect.Height) 21 Using bmpGraphics As Graphics = Graphics.FromImage(bmp), 22 formGraphics As Graphics = Graphics.FromHwnd(con.Handle) 23 Dim bmpDC As IntPtr = bmpGraphics.GetHdc() 24 Dim formDC As IntPtr = formGraphics.GetHdc() 25 BitBlt(bmpDC, 0, 0, rect.Width, rect.Height, formDC, rect.Left, rect.Top, SRCCOPY) 26 bmpGraphics.ReleaseHdc() 27 formGraphics.ReleaseHdc() 28 End Using 29 Return bmp 30 End Function 31 32End Class

こんな感じで使います。

VB

1Private Sub Button3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button3.Click 2 Using bmp As Bitmap = FormUtil.CreateClientBitmap(Me, 3 New Rectangle(709, 185, 435, 366)) 4 bmp.Save("C:\Users\Public\test.jpg", Imaging.ImageFormat.Jpeg) 5 End Using 6End Sub

投稿2021/11/13 20:07

KOZ6.0

総合スコア2696

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sake

2021/11/14 05:54

ありがとうございました。 丁寧なモジュールまで作成していただき、大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問