検索でこの「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;
}
}