I use BitBlt() and CreateBitmapSourceFromHBitmap() to capture a window as a BitmapSource that I can display on an Image element in a WPF application. But for some reason, most of the application that it captures is transparent. Here is a source vs. capture image of what's happening:
(source: umbc.edu)
It's gray because the background of the window it's on is gray. Whatever background I give the window will show through.
How can I get the captured image to more accurately reflect the original?
The problem in your code could be due to the Win32 API you're using (
CreateCompatibleDC
,SelectObject
,CreateBitmap
...). I tried with a simpler code, using onlyGetDC
andBitBlt
, and it works fine for me. Here's my code:I tried it in Windows Forms and WPF (with
Imaging.CreateBitmapSourceFromHBitmap
), it works fine in both cases for the same screenshot (SO page in Firefox).HTH,