Sto utilizzando la funzione win32 PrintWindow per acquisire una schermata su un oggetto BitMap.Come acquisire una parte di uno schermo
Se voglio solo catturare una regione della finestra, come posso ritagliare l'immagine in memoria?
Ecco il codice che sto usando per catturare l'intera finestra:
[System.Runtime.InteropServices.DllImport(strUSER32DLL, CharSet = CharSet.Auto, SetLastError = true)]
public static extern int PrintWindow(IntPtr hWnd, IntPtr hBltDC, uint iFlags);
public enum enPrintWindowFlags : uint
{
/// <summary>
///
/// </summary>
PW_ALL = 0x00000000,
/// <summary>
/// Only the client area of the window is copied. By default, the entire window is copied.
/// </summary>
PW_CLIENTONLY = 0x00000001
}
public System.Drawing.Bitmap CaptureWindow(IntPtr hWnd, enPrintWindowFlags eFlags)
{
System.Drawing.Rectangle rctForm = System.Drawing.Rectangle.Empty;
using(System.Drawing.Graphics grfx = System.Drawing.Graphics.FromHdc(GetWindowDC(hWnd)))
{
rctForm = System.Drawing.Rectangle.Round(grfx.VisibleClipBounds);
}
System.Drawing.Bitmap pImage = new System.Drawing.Bitmap(rctForm.Width, rctForm.Height);
System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(pImage);
IntPtr hDC = graphics.GetHdc();
//paint control onto graphics using provided options
try
{
PrintWindow(hWnd, hDC, (uint)eFlags);
}
finally
{
graphics.ReleaseHdc(hDC);
}
return pImage;
}
Questo è quello che stavo pensando ... potrebbe essere possibile afferrare solo quella parte, ma questo è molto più semplice. – Adam