質問させていただきます。
【API技術関連】画像関係"bitblt"の項目をコピーしてデバックしたところ
'hdc' は 'System.Windows.Forms.PictureBox' のメンバではありません。
とはじかれました。
.netでこのエラーは解決できるのでしょうか?
最終的にどうしたいのか、解らないのですが・・・
hdcを得る方法が間違っているようです。
部分的に書きますと・・・
※ フォームのコピー画像をファイルに保存するコードです。
尚、必要な部分しか掲載していません。
<DllImport("gdi32.dll")> Public Function BitBlt(ByVal srchDC As Integer, ByVal srcX As Integer, ByVal srcY As Integer, ByVal srcW As Integer, ByVal srcH As Integer, ByVal desthDC As Integer, ByVal destX As Integer, ByVal destY As Integer, ByVal op As Integer) As Integer
End Function
<DllImport("user32.dll")> Public Function GetWindowDC(ByVal hWnd As Integer) As Integer
End Function
Public Sub CaptureScreen(ByRef f As Form, ByVal szFile As String, ByVal iType As enumImageTypes, ByVal iQuality As Integer, ByVal bStart As Boolean)
Dim hSDC, hMDC As Integer
Dim hBMP, hBMPOld As Integer
Dim r As Integer
Dim FW, FH As Integer
Dim bmp As Bitmap
hSDC = GetWindowDC(f.Handle.ToInt32)
'hSDC = GetDC(f.Handle.ToInt32)
hMDC = CreateCompatibleDC(hSDC)
FW = f.Width
FH = f.Height
hBMP = CreateCompatibleBitmap(hSDC, FW, FH)
hBMPOld = SelectObject(hMDC, hBMP)
r = BitBlt(hMDC, 0, 0, FW, FH, hSDC, 0, 0, 13369376)
hBMP = SelectObject(hMDC, hBMPOld)
r = ReleaseDC(f.Handle.ToInt32, hSDC)
r = DeleteDC(hSDC)
r = DeleteDC(hMDC)
bmp = Image.FromHbitmap(New IntPtr(hBMP))
DeleteObject(hBMP)
Call bmp.Save(szFile)
・・・・
ここで、『hSDC = GetWindowDC(f.Handle.ToInt32)』としている部分を
見て下さい。ウィンドウハンドルからデバイスコンテキストハンドルへの
変換をAPIを使って行っています。
多分、そこが間違っているのではと思いますが。
ご検討下さい。
以上。
岡田様 ご返答ありがとうございます。
『ピクチャーボックスその1にコントロールのサイズ以上の画像を貼り付け、 非表示にして、ピクチャーボックスその2に、PictureBox2_MouseMove() などで、その一部分を高速で表示させたい』を.net作成することが最終的な
目的ではあります。なんとか解決をチェックさせたいと思います。
ツイート | ![]() |