這個函式進行截取軟體上panel1里的影像。在電腦1上截圖正常,
但在電腦2上截取就不正常了,因為他會截取panel最前面的遮檔控制元件包含在里面,電腦都是W7,配置也是一樣的,不知道是不是二臺電腦設定問題還是別的原因導致,
[DllImport("gdi32.dll")]
private static extern bool BitBlt(IntPtr hdcDest, int xDest, int yDest, int wDest, int hDest, IntPtr hdcSource, int xSrc, int ySrc, CopyPixelOperation rop);
[DllImport("user32.dll")]
public static extern IntPtr GetWindowDC(IntPtr ptr);
[DllImport("user32.dll")]
private static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDc);
[DllImport("gdi32.dll")]
private static extern IntPtr SelectObject(IntPtr hdc, IntPtr bmp);
[DllImport("gdi32.dll")]
private static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);
[DllImport("gdi32.dll")]
private static extern IntPtr CreateCompatibleDC(IntPtr hdc);
[DllImport("gdi32.dll")]
private static extern IntPtr DeleteDC(IntPtr hDc);
[DllImport("gdi32.dll")]
private static extern IntPtr DeleteObject(IntPtr hDc);
public Bitmap captureControl(Control control)
{
try
{
IntPtr windowDC = GetWindowDC(control.Handle);
IntPtr hdc = CreateCompatibleDC(windowDC);
IntPtr bmp = CreateCompatibleBitmap(windowDC, control.Width, control.Height);
IntPtr ptr4 = SelectObject(hdc, bmp);
if (BitBlt(hdc, 0, 0, control.Width, control.Height, windowDC, 0, 0, CopyPixelOperation.CaptureBlt | CopyPixelOperation.SourceCopy))
{
Bitmap bitmap = Image.FromHbitmap(bmp);
SelectObject(hdc, ptr4);
DeleteObject(bmp);
DeleteDC(hdc);
ReleaseDC(control.Handle, windowDC);
return bitmap;
}
return null;
}
catch (Exception)
{
return null;
}
}
private void button5_Click(object sender, EventArgs e)
{
this.panel1.Refresh();
Bitmap bitmap = captureControl(this.panel1);
string filename = @"D:\6.PNG";
bitmap.Save(filename, ImageFormat.Jpeg);
}
uj5u.com熱心網友回復:
截圖的時候可以把前邊的控制元件先放后邊唄,截完了再放前邊來。uj5u.com熱心網友回復:
現實情況不允許這樣操作uj5u.com熱心網友回復:
graphics好像有個copyformwindow的自帶截圖函式轉載請註明出處,本文鏈接:https://www.uj5u.com/net/24434.html
標籤:C#
