vb.netでAPI技術関連のbitbltを使用するには?


ごーる  2003-09-19 08:08:54  No: 79491

質問させていただきます。
【API技術関連】画像関係"bitblt"の項目をコピーしてデバックしたところ
 'hdc' は 'System.Windows.Forms.PictureBox' のメンバではありません。
  とはじかれました。
.netでこのエラーは解決できるのでしょうか?


岡田 之仁  2003-09-19 09:46:08  No: 79492

最終的にどうしたいのか、解らないのですが・・・

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を使って行っています。

多分、そこが間違っているのではと思いますが。

ご検討下さい。

以上。


ごーる  2003-09-19 11:19:26  No: 79493

岡田様  ご返答ありがとうございます。  

『ピクチャーボックスその1にコントロールのサイズ以上の画像を貼り付け、  非表示にして、ピクチャーボックスその2に、PictureBox2_MouseMove()  などで、その一部分を高速で表示させたい』を.net作成することが最終的な
  目的ではあります。なんとか解決をチェックさせたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加