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]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Entwickler - Kompakt

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

VB.NET 2017/2015/2013 Aufbau

Nach dieser Schulung können Sie mittels objektorientierter Modelle in VB.NET 2017/2015/2013 wiederverwendbare Elemente eigenständig erstellen.

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