Я время от времени сталкивался с этим «BitBlt» в своем поиске, но я не понимаю, как его использовать.
Судя по тому, что говорят люди, это самый быстрый способ сделать снимок экрана, который показывает Windows. Тем не менее, я ничего не могу сказать об этом сам, поскольку у меня это не работает.
Единственное, что мне удалось хотя бы попробовать, это метод:
gfxBmp.CopyFromScreen(0,0,0,0 rc.Size,CopyPixelOperation.CaptureBlt);
Который, я думаю, использует его? (rc.size = размер определенного окна) К сожалению, это ничего не делает, я получаю черную картинку. однако, если я использую SourceCopy, это работает, но это нормальный метод.
В настоящее время я пытаюсь заменить некоторый код, чтобы использовать BltBit, но он тоже не работает так хорошо:
public MemoryStream CaptureWindow(IntPtr hwnd, EncoderParameters JpegParam)
{
NativeMethods.Rect rc;
NativeMethods.GetWindowRect(hwnd, out rc);
using (Bitmap bmp = new Bitmap(rc.Width, rc.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
{
using (Graphics gfxBmp = Graphics.FromImage(bmp))
{
IntPtr hdcBitmap = gfxBmp.GetHdc();
try
{
NativeMethods.BitBlt(hdcBitmap, 0, 0, 0, 0, hwnd, 0, 0, 0xCC0020);
}
finally
{
gfxBmp.ReleaseHdc(hdcBitmap);
}
}
MemoryStream ms = new MemoryStream();
bmp.Save(ms, GetEncoderInfo(ImageFormat.Jpeg), JpegParam);
return ms;
}
}