【发布时间】:2013-08-11 00:18:40
【问题描述】:
我在搜索中不时遇到这个“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;
}
}
【问题讨论】: