BitMapsource에서 알파를 제거하십시오
-
20-09-2019 - |
문제
BitBlt ()와 CreateBitMapsOUrceFromHbitMap ()을 사용하여 WPF 응용 프로그램의 이미지 요소에 표시 할 수있는 BitMapSource로 창을 캡처합니다. 그러나 어떤 이유로 캡처 한 응용 프로그램의 대부분은 투명합니다. 다음은 무슨 일이 일어나고 있는지에 대한 소스 대 캡처 이미지입니다.
(원천: 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,
제휴하지 않습니다 StackOverflow