Feedback

C# - Bild von einem Control oder Panel

Veröffentlicht von am 06.11.2006
(3 Bewertungen)
Mit diesem recht einfachen Snippet kann ein Bild von einem ganzen Panel oder sogar eines einzelnen Controls erzeugt werden
GFU-Schulungen  [Anzeige]

VB.NET Einführung

Die Schulung zeigt Ihnen, wie Sie einfache, benutzerorientierte Programme, die auf Datenbanken zugreifen, in VB.NET eigenständig entwickeln. 

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

[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!