화면 가운데를 확대하는 프로그램을 작성하여 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 속도로 작동하면 더듬 거리게됩니다.
제 생각에는 화면 중앙을 확대 한 다음 확대 된 이미지를 화면 중앙의 정사각형으로 표시하는 것입니다. 사각형 외부의 영역은 원래 크기로 남습니다.
그 사각형에는 무엇이 있습니까? –
좋아하지만 흰색/회색/검은 색으로 남겨 두는 것은 평소와 같습니다 – DiskJunky
당신이 나를 오해 한 것 같아서 제 질문을 편집했습니다. 모든 프레임마다 내 양식을 표시하는 화면 가운데에 정사각형을 그려 넣으면 스크린 샷에서 무시하려는 양식으로 확대 된 이미지를 표시하고 싶기 때문에 원하는 확대/축소없이 그대로있을 것입니다. –