문제

BitBlt ()와 CreateBitMapsOUrceFromHbitMap ()을 사용하여 WPF 응용 프로그램의 이미지 요소에 표시 할 수있는 BitMapSource로 창을 캡처합니다. 그러나 어떤 이유로 캡처 한 응용 프로그램의 대부분은 투명합니다. 다음은 무슨 일이 일어나고 있는지에 대한 소스 대 캡처 이미지입니다.

https://userpages.umbc.edu/~smyth1/images/screencap.PNG
(원천: umbc.edu)

창문의 배경이 회색이기 때문에 회색입니다. 내가 창문을주는 배경은 어떤 배경을 보여줄 것입니다.

캡처 된 이미지가 원본을보다 정확하게 반영하도록하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

코드의 문제는 사용중인 Win32 API 때문일 수 있습니다.CreateCompatibleDC, SelectObject, CreateBitmap...). 나는 더 간단한 코드를 사용하여 시도했다 GetDC 그리고 BitBlt, 그리고 그것은 나에게 잘 작동합니다. 내 코드는 다음과 같습니다.

    public static Bitmap Capture(IntPtr hwnd)
    {
        IntPtr hDC = GetDC(hwnd);
        if (hDC != IntPtr.Zero)
        {
            Rectangle rect = GetWindowRectangle(hwnd);
            Bitmap bmp = new Bitmap(rect.Width, rect.Height);
            using (Graphics destGraphics = Graphics.FromImage(bmp))
            {
                BitBlt(
                    destGraphics.GetHdc(),
                    0,
                    0,
                    rect.Width,
                    rect.Height,
                    hDC,
                    0,
                    0,
                    TernaryRasterOperations.SRCCOPY);
            }
            return bmp;
        }
        return null;
    }

Windows 양식과 WPF에서 시도했습니다 ( Imaging.CreateBitmapSourceFromHBitmap), 동일한 스크린 샷 (Firefox의 페이지)에서 두 경우 모두 잘 작동합니다.

HTH,

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top