Feedback

C# - Bild von einem Control oder Panel

Veröffentlicht von am 11/6/2006
(3 Bewertungen)
Mit diesem recht einfachen Snippet kann ein Bild von einem ganzen Panel oder sogar eines einzelnen Controls erzeugt werden
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern long BitBlt(IntPtr hdcDest, int xDest, int yDest, int width, int height, IntPtr hdcSrc, int xSrc, int ySrc, int dwRop);

/// <summary>
/// Erzeugen von einem Image Objekt von dem übergebenen Control
/// </summary>
/// <param name="ctrl">Das Control von dem ein Bild erzeugt werden soll</param>
/// <returns>Ein Image Object mit dem Bild des Controls</returns>
public Image CaptureCtrl(Control  ctrl) {
	Graphics g = this.CreateGraphics();

	// Ein neues Image mit der grösse des jeweiligen Controls anlegen
	Image newImage = new Bitmap(ctrl.Size.Width, ctrl.Size.Height, g);

	Graphics memoryGraphics = Graphics.FromImage(newImage);
	//Handle holen
	IntPtr src = g.GetHdc();
	IntPtr dest = memoryGraphics.GetHdc();

	// das Handle des Ziels
	// die X Position an der das Bild eingefügt werden soll
	// die Y Position an der das Bild eingefügt werden soll
	// die breite des Bildes
	// die höhe des Bildes
	// das Handle der Quelle
	// die X Position an der das Control liegt
	// die Y Position an der das Control liegt
	// Raster Operation Code an dieser Stelle ist es SRCCOPY
	// Natürlich muß der auf der Seite angegebene Hex wert noch in ein int umgerechnet werden
	// mehr informationen auf http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceui40/html/_celrfternaryrasteroperations.asp
	BitBlt(dest, 0, 0, ctrl.ClientRectangle.Width, ctrl.ClientRectangle.Height, src, ctrl.Location.X, ctrl.Location.Y, 13369376);

	// Handles wieder Freigeben
	g.ReleaseHdc(dest);
	memoryGraphics.ReleaseHdc(src);


	return newImage;
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!