Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
StretchBlt について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9542#CommentId14175
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
反る戸
 (社会人)
投稿日時
2010/2/10 07:31:33
自己解決しました。以下のURLに答えがありました。
http://dobon.net/vb/bbs/log3-39/24003.html#ID24003
こういうことだったようです。
1.GraphicsはImageから取得してよいが、転送元のデバイスコンテキストは
BitmapからGetHbitmap()で作成したbmpのハンドルをSelectObjectで選択して
やらなければならない。
2.転送先のデバイスコンテキストでSelectObjectを使ってはいけない。
質問時のコードのButton1_Clickを以下のように修正するとうまくいきました。
SelectObject()とDeleteObject()の宣言は別に追加していますが。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g1 As Graphics = Graphics.FromImage(PictureBox1.Image)
Dim g2 As Graphics = Graphics.FromImage(PictureBox2.Image)
g2.DrawRectangle(Pens.BlueViolet, 2, 2, 26, 26)
Dim srcDc As IntPtr = g1.GetHdc()
Dim destDc As IntPtr = g2.GetHdc()
Dim srcHbmp As IntPtr = DirectCast(Me.PictureBox1.Image, Bitmap).GetHbitmap()
SelectObject(srcDc, srcHbmp)
Dim retval As Integer
retval = StretchBlt(destdc, 0, 0, 32, 32, srcdc, x, y, 16, 16, SRCCOPY)
DeleteObject(srcHbmp)
g2.ReleaseHdc(destdc)
g1.ReleaseHdc(srcdc)
g2.Dispose()
g1.Dispose()
Refresh()
x += 16
If x > 320 Then
x = 0
y += 16
End If
End Sub
お騒がせしました。今後ともよろしくお願いします。