{"id":55000298,"date":"2022-02-01T00:00:00","date_gmt":"2022-05-16T21:33:15","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=298"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Zeichnen_in_Bitmaps_mit_der_GraphicsKlasse","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Zeichnen_in_Bitmaps_mit_der_GraphicsKlasse\/","title":{"rendered":"Zeichnen in Bitmaps mit der Graphics-Klasse"},"content":{"rendered":"<p><b>Im Artikel &#8220;Bitmaps programmieren mit VB.NET&#8221; haben wir gezeigt, wie Sie mit VB.NET Bitmaps erzeugen und die einzelnen Pixel mit Farben f&uuml;llen beziehungsweise die enthaltenen Farben auslesen. Im vorliegenden Artikel gehen wir einen Schritt weiter: Wir nutzen eine Klasse namens Graphics, um in einem Bitmap zu zeichnen. Dabei zeigen wir die Techniken zum Erstellen der grundlegenden Formen und liefern Know-how, wie Sie F&uuml;llungen und Schraffuren hinzuf&uuml;gen. Schlie&szlig;lich speichern wir die erzeugten Bitmaps im Dateisystem und zeigen diese in der jeweiligen Standardapp f&uuml;r die entsprechende Dateiendung an.<\/b><\/p>\n<h2>Vorbereitung: LINQPad<\/h2>\n<p>Genau wie im oben genannten Artikel <b>Bitmaps programmieren mit VB.NET <\/b>(<b>www.datenbankentwickler.net\/297<\/b>) verwenden wir auch in diesem Artikel LINQPad als Spielwiese zum Ausprobieren der Beispiele. Hier brauchen wir zum Testen einiger Zeilen Code nicht extra ein VB-Projekt anzulegen und dieses jedes Mal neu zu starten, um die Funktionsweise zu pr&uuml;fen. Wir geben die gew&uuml;nschten Zeilen einfach in eine Methode ein und starten diese mit <b>F5 <\/b>&#8211; ganz wie es beispielsweise im VBA-Editor m&ouml;glich ist. Wie Sie LINQPad nutzen, lesen Sie im Artikel <b>LINQPad: LINQ, C# und VB einfach ausprobieren <\/b>(<b>www.datenbankentwickler.net\/100<\/b>).<\/p>\n<p>F&uuml;r unser aktuelles Beispiel ben&ouml;tigen wir lediglich eine neue LINQPad-Query mit dem Wert <b>VB Program <\/b>im Auswahlfeld <b>Language<\/b>. Damit wir die Elemente des Namespaces <b>System.Drawing <\/b>verwenden k&ouml;nnen, f&uuml;gen wir diesen zu der Query hinzu. Dazu klicken Sie mit der rechten Maustaste auf den Registerreiter der Query und w&auml;hlen den Eintrag <b>Query Properties&#8230; <\/b>aus. Hier wechseln Sie zur Registerseite <b>Additional Namespace Imports <\/b>und geben den Namespace <b>System.Drawing <\/b>einfach ein &#8211; ohne <b>Imports<\/b>-Anweisung, wie es direkt in Modulen n&ouml;tig w&auml;re (siehe Bild 1). Anschlie&szlig;end schlie&szlig;en Sie den Dialog mit der <b>OK<\/b>-Schaltfl&auml;che wieder.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_01\/pic_298_001.png\" alt=\"Hinzuf&uuml;gen eines Verweises auf den Namespace System.Drawing\" width=\"549,6265\" height=\"314,8452\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Hinzuf&uuml;gen eines Verweises auf den Namespace System.Drawing<\/span><\/b><\/p>\n<p>Auch in diesem Artikel wollen wir die erzeugten Bilder in einem Verzeichnis speichern, wo wir diese schnell wiederfinden. Den Namen dieses Verzeichnisses hinterlegen wir in einer Konstanten, die wir oben im Code wie folgt definieren:<\/p>\n<pre>Const strPath<span style=\"color:blue;\"> As String<\/span> = \"C:\\...\\BitmapTest\\\"<\/pre>\n<h2>Zeichnen mit Graphics<\/h2>\n<p>W&auml;hrend Sie in Objekten der <b>Bitmap<\/b>-Klasse mit der Methode <b>SetPixel <\/b>nur die Farbe f&uuml;r einzelne Pixel festlegen k&ouml;nnen, bietet die <b>Graphics<\/b>-Klasse einige weitere M&ouml;glichkeiten. Die <b>Graphics<\/b>-Klasse stellt Methoden wie <b>DrawLine <\/b>zum Zeichnen von Linien oder <b>DrawString <\/b>zum Einf&uuml;gen von Texten zur Verf&uuml;gung.<\/p>\n<p>Dabei referenziert das Objekt auf Basis der <b>Graphics<\/b>-Klasse zun&auml;chst das Element, dem beispielsweise Linien oder Texte hinzugef&uuml;gt werden sollen. Um die im oben genannten Artikel vorgestellte <b>Bitmap-<\/b>Klasse direkt einzubinden, nutzen wir die dort erzeugten Bitmaps quasi als Zeichenblatt. Das <b>Graphics<\/b>-Objekt f&uuml;llen wir dabei mit der <b>From-Image<\/b>-Methode mit dem <b>Bitmap<\/b>-Element.<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>bmp<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Bitmap(480, 320)\r\n<span style=\"color:blue;\">Dim <\/span>objGraphics<span style=\"color:blue;\"> As <\/span>Graphics\r\nobjGraphics = Graphics.FromImage(bmp)<\/pre>\n<p>Danach k&ouml;nnen wir die nachfolgenden Methoden nutzen, um dem <b>Bitmap<\/b>-Objekt &uuml;ber die <b>Graphics<\/b>-Klasse Elemente hinzuzuf&uuml;gen:<\/p>\n<ul>\n<li><b>DrawArc<\/b>: Zeichnet einen Bogen.<\/li>\n<li><b>DrawBezier<\/b>: Zeichnet eine B&eacute;zier-Kurve.<\/li>\n<li><b>DrawBeziers<\/b>: Zeichnet mehrere B&eacute;zier-Kurven.<\/li>\n<li><b>DrawClosedCurve<\/b>: Zeichnet eine geschlossene Cardinal-Splinekurve. <\/li>\n<li><b>DrawEllipse<\/b>: Zeichnet eine Ellipse.<\/li>\n<li><b>DrawIcon<\/b>: Zeichnet das durch das angegebene Icon dargestellte Bild.<\/li>\n<li><b>DrawIconUnstretched<\/b>: Zeichnet das durch das angegebene Icon dargestellte Bild, ohne das Bild zu skalieren.<\/li>\n<li><b>DrawImage<\/b>: Zeichnet das angegebene Bild in seiner urspr&uuml;nglichen physischen Gr&ouml;&szlig;e.<\/li>\n<li><b>DrawImageUnscaled<\/b>: Zeichnet das angegebene Bild in seiner urspr&uuml;nglichen physischen Gr&ouml;&szlig;e.<\/li>\n<li><b>DrawImageUnscaledAndClipped<\/b>: Zeichnet das angegebene Bild ohne Skalierung und beschneidet es ggf. auf die Gr&ouml;&szlig;e des angegebenen Rechtecks.<\/li>\n<li><b>DrawLine<\/b>: Zeichnet eine Linie.<\/li>\n<li><b>DrawLines<\/b>: Zeichnet eine Reihe von Linien.<\/li>\n<li><b>DrawPath<\/b>: Zeichnet einen grafischen Pfad:<\/li>\n<li><b>DrawPie<\/b>: Zeichnet eine durch eine Ellipse definierte Kreisform.<\/li>\n<li><b>DrawPolygon<\/b>: Zeichnet ein Vieleck.<\/li>\n<li><b>DrawRectangle<\/b>: Zeichnet ein Rechteck.<\/li>\n<li><b>DrawString<\/b>: Zeichnet die angegebene Textzeichenfolge.<\/li>\n<\/ul>\n<p>Diese Methoden sehen wir uns in den folgenden Abschnitten im Detail an und stellen dabei weitere ben&ouml;tigte Klassen vor wie beispielsweise solche zur Angabe des zu verwendenden Stiftes.<\/p>\n<h2>Eine einfache Linie hinzuf&uuml;gen<\/h2>\n<p>Den Start machen wir mit einer einfachen Methode, die eine Linie zu einem Bitmap von 480 x 320 Pixeln hinzuf&uuml;gen soll. Im ersten Beispiel nutzen wir die &Uuml;berladung der <b>DrawLine<\/b>-Methode, welche mit dem ersten Parameter ein <b>Pen<\/b>-Objekt entgegennimmt und mit den &uuml;brigen vieren die Koordinaten des Startpunkts und des Endpunkts der zu zeichnenden Linie. Da die Koordinaten <b>0<\/b>-basiert sind, soll unsere diagonale Linie vom Punkt 0,0 zum Punkt 479, 319 verlaufen:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>EinfacheLinie\r\n     <span style=\"color:blue;\">Dim <\/span>strFilename<span style=\"color:blue;\"> As String<\/span> = \"EinfacheLinie.bmp\"\r\n     <span style=\"color:blue;\">Dim <\/span>bmp<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Bitmap(480, 320)\r\n     <span style=\"color:blue;\">Dim <\/span>objGraphics<span style=\"color:blue;\"> As <\/span>Graphics\r\n     <span style=\"color:blue;\">Dim <\/span>objPen<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Pen(color.Black)\r\n     objGraphics = Graphics.FromImage(bmp)\r\n     objGraphics.DrawLine(objPen, 0,0,479,319)\r\n     bmp.Save(strPath & strFilename)\r\n     Process.Start(strPath & strFilename)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Hier definieren wir au&szlig;erdem ein <b>Pen<\/b>-Element, bei dessen Initialisierung wir eine &Uuml;berladung verwenden, welche nur die Farbe des zu verwendenden Stiftes entgegennimmt &#8211; hier <b>Color.Black<\/b>. Das mit <b>objPen <\/b>referenzierte <b>Pen<\/b>-Element &uuml;bergeben wir als ersten Parameter der <b>DrawLine<\/b>-Methode. Anschlie&szlig;end speichern wir das <b>Bitmap<\/b>-Objekt und zeigen es in der entsprechenden Anwendung an &#8211; hier in <b>Paint<\/b>. Das Ergebnis sehen sie in Bild 2.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_01\/pic_298_002.png\" alt=\"Eine mit der DrawLine-Methode erstellte Linie.\" width=\"549,6265\" height=\"536,9185\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Eine mit der DrawLine-Methode erstellte Linie.<\/span><\/b><\/p>\n<h2>Einfache Linie mit Point-Elementen als Parameter<\/h2>\n<p>Gegebenenfalls liegen Ihnen der Start- und der Endpunkt der Linie als Koordinaten bereits vor und Sie m&ouml;chten diese in Form von <b>Point<\/b>-Objekten erfassen. Dazu erstellen Sie wie folgt zwei neue <b>Point<\/b>-Objekte, und zwar vor dem Aufruf der <b>DrawLine<\/b>-Methode:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objStartPoint<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Point(0,0)\r\n<span style=\"color:blue;\">Dim <\/span>objEndpoint<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Point(479,319)<\/pre>\n<p>In der <b>DrawLine<\/b>-Methode geben Sie die Punkte aus <b>objStartpoint <\/b>und <b>objEndpoint <\/b>dann als zweiten und dritten Parameter an:<\/p>\n<pre>objGraphics.DrawLine(objPen, objStartPoint, objEndpoint)<\/pre>\n<h2>Den Stift mit der Pen-Klasse anpassen<\/h2>\n<p>Die oben gezeichnete Linie ist eine schwarze, durchgezogene Linie mit einer Breite von einem Pixel. Die Farbe Schwarz haben wir beim Erstellen des <b>Pen<\/b>-Elements als Parameter angegeben, die &uuml;brigen Eigenschaften werden standardm&auml;&szlig;ig eingestellt:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objPen<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Pen(Color.Black)<\/pre>\n<p>Die Breite k&ouml;nnen Sie mit dem zweiten Parameter einer weiteren &Uuml;berladung des Konstruktors der <b>Pen<\/b>-Klasse angeben, hier zum Beispiel f&uuml;r eine Linie mit einer Breite von drei Pixeln:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objPen<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Pen(Color.Black, 3)<\/pre>\n<p>Sp&auml;ter schauen wir uns weitere M&ouml;glichkeiten der <b>Pen<\/b>-Klasse an.<\/p>\n<h2>Einen Linienzug zeichnen<\/h2>\n<p>Die Methode <b>DrawLines <\/b>erlaubt das Zeichnen mehrerer zusammenh&auml;ngender Linien gleichzeitig, wobei Sie die Koordinaten der Start- und Endpunkte als <b>Point<\/b>-Elemente jeweils mit einem Array &uuml;bergeben. Im folgenden Beispiel erstellen wir wieder ein Bitmap mit 480 x 320 Pixeln und referenzieren dieses mit dem <b>Graphics<\/b>-Element. Dann erstellen wir das Array der Punkte, wobei die Punkte jeweils als neue <b>Point<\/b>-Elemente angeben. Danach rufen wir die <b>DrawLines<\/b>-Methode auf und &uuml;bergeben dieser als zweiten Parameter das Array aus <b>obj-Points<\/b> (siehe Methode <b>EinfacherLinienzug <\/b>in der Beispieldatei):<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>strFilename<span style=\"color:blue;\"> As String<\/span> = \"EinfacheLinien.bmp\"\r\n<span style=\"color:blue;\">Dim <\/span>bmp<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Bitmap(480, 320)\r\n<span style=\"color:blue;\">Dim <\/span>objGraphics<span style=\"color:blue;\"> As <\/span>Graphics\r\n<span style=\"color:blue;\">Dim <\/span>objPoints<span style=\"color:blue;\"> As <\/span>Point() = {<span style=\"color:blue;\">New<\/span> Point(0,0), <span style=\"color:blue;\">New<\/span> Point(479,0), <span style=\"color:blue;\">New<\/span> Point(0,319), <span style=\"color:blue;\">New<\/span> Point(479,319)}\r\n<span style=\"color:blue;\">Dim <\/span>objPen<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Pen(color.Black, 3)\r\nobjGraphics = Graphics.FromImage(bmp)\r\nobjGraphics.DrawLines(objPen, objPoints)\r\nbmp.Save(strPath & strFilename)\r\nProcess.Start(strPath & strFilename)<\/pre>\n<p>Das Ergebnis sehen wir in Bild 3. Der resultierende Linienzug liefert ein Z.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_01\/pic_298_003.png\" alt=\"Ein Linienzug in Z-Form\" width=\"499,6267\" height=\"402,7701\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Ein Linienzug in Z-Form<\/span><\/b><\/p>\n<h2>Rechtecke zeichnen mit DrawRectangle<\/h2>\n<p>Als N&auml;chstes schauen wir uns an, wie wir Rechtecke zeichnen k&ouml;nnen. Ein Rechteck erfordert prinzipiell genau wie eine Linie nur die Angabe zweier Koordinaten &#8211; die des oberen linken und des unteren rechten Punktes. Zum Erstellen eines Rechtecks verwenden wir die Methode <b>DrawRectangle<\/b>.<\/p>\n<p>Diese erwartet in einer &Uuml;berladung statt der oben angegebenen Koordinaten jedoch nur eine absolute Koordinate f&uuml;r den ersten Punkt mit x und y sowie mit weiteren Parametern die Angabe der gew&uuml;nschten Breite und H&ouml;he. Das sieht f&uuml;r ein Rechteck um das komplette Bitmap wie folgt aus (siehe Bild 4):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_01\/pic_298_004.png\" alt=\"Ein einfaches Rechteck\" width=\"499,6267\" height=\"398,7406\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Ein einfaches Rechteck<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>strFilename<span style=\"color:blue;\"> As String<\/span> = \"EinfachesRechteck.bmp\"\r\n<span style=\"color:blue;\">Dim <\/span>bmp<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Bitmap(480, 320)\r\n<span style=\"color:blue;\">Dim <\/span>objGraphics<span style=\"color:blue;\"> As <\/span>Graphics\r\n<span style=\"color:blue;\">Dim <\/span>objPen<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Pen(color.Black, 3)\r\nobjGraphics = Graphics.FromImage(bmp)\r\nobjGraphics.DrawRectangle(objPen, 0, 0, 479, 319)<\/pre>\n<h2>Rechteck auf Basis einer Rect-Struktur erstellen<\/h2>\n<p>Sie k&ouml;nnen allerdings auch eine <b>Rect<\/b>-Struktur erstellen, welche prinzipiell die gleichen Informationen enth&auml;lt, und diese als zweiten Parameter an die <b>DrawRectangle<\/b>-Methode &uuml;bergeben. Wir haben das Rechteck nun mit einem Abstand von 10 Pixeln zu den Seitenr&auml;ndern erstellt.<\/p>\n<p>Das Ergebnis sieht wie in Bild 5 aus, die vollst&auml;ndige Methode finden Sie unter dem Namen <b>EinfachesRechteck_Rect <\/b>in der Beispieldatei:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_01\/pic_298_005.png\" alt=\"Ein Rechteck mit 10 Pixeln Abstand zum Rand des Bitmaps\" width=\"499,6267\" height=\"396,8189\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Ein Rechteck mit 10 Pixeln Abstand zum Rand des Bitmaps<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>strFilename<span style=\"color:blue;\"> As String<\/span> = \"EinfachesRechteck_Rect.bmp\"\r\n<span style=\"color:blue;\">Dim <\/span>bmp<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Bitmap(480, 320)\r\n<span style=\"color:blue;\">Dim <\/span>objGraphics<span style=\"color:blue;\"> As <\/span>Graphics\r\n<span style=\"color:blue;\">Dim <\/span>objRectangle<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> rectangle(10, 10, 459, 299)\r\n<span style=\"color:blue;\">Dim <\/span>objPen<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Pen(color.Black, 3)\r\nobjGraphics = Graphics.FromImage(bmp)\r\nobjGraphics.DrawRectangle(objPen, objRectangle)<\/pre>\n<h2>F&uuml;llen eines Rechtecks mit einer Farbe<\/h2>\n<p>Gegebenenfalls m&ouml;chten Sie das Rechteck auch mit einer Farbe f&uuml;llen wie in Bild 6.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_01\/pic_298_006.png\" alt=\"Gef&uuml;lltes Rechteck\" width=\"499,6267\" height=\"394,3414\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Gef&uuml;lltes Rechteck<\/span><\/b><\/p>\n<p>Wider Erwarten gibt es keine &Uuml;berladung f&uuml;r die <b>DrawRectangle<\/b>-Methode, welche die Angabe einer F&uuml;llfarbe zul&auml;sst. Stattdessen gibt es eine weitere Methode namens <b>FillRectangle<\/b>, der wir ebenfalls eine <b>Rect<\/b>-Struktur mit den Abmessungen des Rechtecks &uuml;bergeben k&ouml;nnen. Au&szlig;erdem erwartet diese die F&uuml;llfarbe in Form eines <b>Brush<\/b>-Elements. Die <b>FillRectangle<\/b>-Methode f&uuml;llt allerdings kein zuvor noch zu erstellendes Rechteck, sondern sie erstellt ein neues Rechteck, das direkt mit der angegebenen Farbe gef&uuml;llt wird. Wenn Sie also beispielsweise ein Rechteck mit einem schwarzen Rahmen erstellen wollen, das mit roter Farbe gef&uuml;llt ist, ben&ouml;tigen Sie sowohl den Aufruf einer <b>DrawRectangle<\/b>&#8211; als auch einer <b>FillRectangle<\/b>-Methode. In diesem Fall definieren wir das Rechteck mit dem schwarzen Rahmen wie zuvor. Damit das rote, ausgef&uuml;llte Rechteck genau innerhalb des schwarzen Rechtecks angezeigt wird und den Rahmen nicht &uuml;berdeckt, beginnt es bei den Koordinaten <b>x=12 <\/b>und <b>y=12<\/b> (die Linie des schwarzen Rechtecks startet bei <b>(10|10)<\/b>, aber da wir als Breite 3 Pixel angegeben haben, wird auch noch das Pixel <b>(11|11)<\/b> vom Rand des Rechtecks eingenommen &#8211; und nat&uuml;rlich noch die anderen Pixel, die innerhalb der eigentlichen Linie liegen). Die Breite und die H&ouml;he stellen wir ebenfalls entsprechend ein. So erstellen wir also zwei <b>Rectangle<\/b>-Objekte namens <b>objRectangle <\/b>und <b>objRectangleFill <\/b>und nutzen diese dann jeweils als zweiten Parameter der Methoden <b>DrawRectangle <\/b>und <b>FillRectangle<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>strFilename<span style=\"color:blue;\"> As String<\/span> = \"Rechteck_Gefuellt.bmp\"\r\n<span style=\"color:blue;\">Dim <\/span>bmp<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Bitmap(480, 320)\r\n<span style=\"color:blue;\">Dim <\/span>objGraphics<span style=\"color:blue;\"> As <\/span>Graphics\r\n<span style=\"color:blue;\">Dim <\/span>objRectangle<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Rectangle(10, 10, 459, 299)\r\n<span style=\"color:blue;\">Dim <\/span>objRectangleFill<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Rectangle(12, 12, 456, 296)\r\n<span style=\"color:blue;\">Dim <\/span>objPen<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Pen(color.Black, 3)\r\n<span style=\"color:blue;\">Dim <\/span>objBrush<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> SolidBrush(color.Red)\r\nobjGraphics = Graphics.FromImage(bmp)\r\nobjGraphics.DrawRectangle(objPen, objRectangle)\r\nobjGraphics.FillRectangle(objBrush, objRectangleFill)<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000298\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000298?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000298\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"fd89c58339\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Artikel &#8220;Bitmaps programmieren mit VB.NET&#8221; haben wir gezeigt, wie Sie mit VB.NET Bitmaps erzeugen und die einzelnen Pixel mit Farben f&uuml;llen beziehungsweise die enthaltenen Farben auslesen. Im vorliegenden Artikel gehen wir einen Schritt weiter: Wir nutzen eine Klasse namens Graphics, um in einem Bitmap zu zeichnen. Dabei zeigen wir die Techniken zum Erstellen der grundlegenden Formen und liefern Know-how, wie Sie F&uuml;llungen und Schraffuren hinzuf&uuml;gen. Schlie&szlig;lich speichern wir die erzeugten Bitmaps im Dateisystem und zeigen diese in der jeweiligen Standardapp f&uuml;r die entsprechende Dateiendung an.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012022,662022,44000029,44000016],"tags":[],"yst_prominent_words":[],"class_list":["post-55000298","post","type-post","status-publish","format-standard","hentry","category-66012022","category-662022","category-Access_programmieren","category-VBGrundlagen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000298","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000298"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000298\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000298"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000298"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000298"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}