2017-10-05 11 views
1

画面の中央を拡大するプログラムを作成したいので、user32.dllからいくつかのメソッドを使用しました。私のプログラムは画面をキャプチャし、60FPSのレートでピクチャボックスのイメージをリフレッシュするように管理しましたが、大きな画像をリアルタイムで表示したい場合は、より大きな画像を表示するフォームもキャプチャして無限になります画像ループ内の画像。私は画面をキャプチャし、大きな画像を表示する私のフォームを無視したい。画面をキャプチャして画像内の特定のウィンドウを無視する方法

私は無視したいウィンドウのハンドルを渡し、指定したウィンドウ以外のものをキャプチャするようなことを考えました。これが今の私のコードです:

[DllImport("user32.dll")] 
public static extern IntPtr GetDesktopWindow(); 

私はすでにこのソリューションを試みた:How can i capture the screen without the Form? をしかし、それはのPictureBoxリフレッシュので、うまく動作しませんでした、私はそれがこのメソッドからである渡す

Bitmap CaptureWindow(IntPtr handle) 
{ 
    IntPtr hdcSrc = User32.GetWindowDC(handle); 
    User32.RECT windowRect = new User32.RECT(); 
    User32.GetWindowRect(handle, ref windowRect); 
    int width = windowRect.right - windowRect.left; 
    int height = windowRect.bottom - windowRect.top; 
    IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc); 
    IntPtr hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, width, height); 
    IntPtr hOld = GDI32.SelectObject(hdcDest, hBitmap); 

    GDI32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, GDI32.SRCCOPY); 
    GDI32.SelectObject(hdcDest, hOld); 
    GDI32.DeleteDC(hdcDest); 
    User32.ReleaseDC(handle, hdcSrc); 

    Bitmap img = null; 
    try 
    { 
     img = new Bitmap(Image.FromHbitmap(hBitmap), 1920 * 2, 1080 * 2);    
     using (Graphics g = Graphics.FromImage(img)) 
     { 
      g.FillRectangle(Brushes.White, new Rectangle(0, 0, 200, 1080));//img.Width - (img.Height/2), img.Height)); 
      // g.FillRectangle(Brushes.White, new Rectangle(img.Width - (img.Height/2) + img.Height, 0, img.Width - img.Height/2, img.Height)); 
     } 
     GDI32.DeleteObject(hBitmap);    
    } 
    catch (Exception e) 
    { } 
    return img; 
} 

ハンドルそれが吃音を引き起こす60Hzのレートで。

私の考えは、画面の真ん中を拡大し、拡大した画像を画面の中央の正方形に表示することです(正方形の外側の領域は元のサイズになります)。

答えて

0

最初のイメージをキャプチャするときは、フォーム内に対応する領域を、同じ領域に矩形を描いて空白にします。 Formでウィンドウの位置と大きさを取得し、キャプチャした画像のその部分に矩形を描画することができます。

+0

その矩形は何ですか? –

+1

好きなものは好きですが、白/灰色/黒のまま残すのは普通です – DiskJunky

+0

私はあなたが私を誤解したと思うので、私は自分の質問を編集しました。画面の中央に正方形を描くと、フレームごとにフォームが表示されますが、拡大した画像をスクリーンショットで無視したい形で表示したいので、ズームしないとそこにとどまることはありません。 –

関連する問題