2017-10-05 5 views
1

화면 가운데를 확대하는 프로그램을 작성하여 user32.dll에서 몇 가지 방법을 사용했습니다. 나는 내 프로그램이 화면을 캡처하고 60FPS 속도로 그림 상자에서 이미지를 새로 고칠 수있게 만들었지 만 더 큰 이미지를 실시간으로 표시하고자 할 때 프로그램은 더 큰 이미지를 표시하는 내 양식을 캡처하여 무한 이미지 루프 내부의 이미지. 나는 화면을 캡쳐하고 더 큰 이미지를 보여주는 나의 형태를 무시하고 싶다.어떻게 화면을 캡처하고 이미지의 특정 창을 무시할 수 있습니까?

내가 무시하고 싶은 창 핸들을 전달한 것처럼 내가 지정한 창 이외의 내용은 캡처 할 것입니다. 이 지금은 내 코드입니다 :

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; 
} 

핸들 내가이 방법에서입니다 통과 : How can i capture the screen without the Form?이 하지만이 작동하지 않았다 잘 때문에 PictureBox를 새로 고침 :

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

은 이미이 솔루션을 시도 60Hz 속도로 작동하면 더듬 거리게됩니다.

제 생각에는 화면 중앙을 확대 한 다음 확대 된 이미지를 화면 중앙의 정사각형으로 표시하는 것입니다. 사각형 외부의 영역은 원래 크기로 남습니다.

답변

0

초기 이미지를 캡처 할 때 같은 영역에 사각형을 그려 양식에 해당하는 영역을 비워 둡니다. Form을 통해 창 위치와 크기를 가져올 수 있으며 캡처 한 이미지의 해당 부분에 사각형을 그릴 수 있습니다.

+0

그 사각형에는 무엇이 있습니까? –

+1

좋아하지만 흰색/회색/검은 색으로 남겨 두는 것은 평소와 같습니다 – DiskJunky

+0

당신이 나를 오해 한 것 같아서 제 질문을 편집했습니다. 모든 프레임마다 내 양식을 표시하는 화면 가운데에 정사각형을 그려 넣으면 스크린 샷에서 무시하려는 양식으로 확대 된 이미지를 표시하고 싶기 때문에 원하는 확대/축소없이 그대로있을 것입니다. –