| |
VB.NET - Ein- und UmsteigerRe: Schraffieren ohne HatchBrush | | | Autor: keco | Datum: 11.07.16 19:36 |
| Wenn du mit der Bibliothek ganze Bilder zeichnen kannst, dann erzeuge ein Bitmap-Objekt mit dem HatchBrush und zeichne dieses.
Mal ganz quick'n'dirty:
Dim p1 As New Point(10, 10)
Dim p2 As New Point(220, 110)
Dim p3 As New Point(50, 240)
Using path As New Drawing2D.GraphicsPath, brush As New _
Drawing2D.HatchBrush(Drawing2D.HatchStyle.BackwardDiagonal, _
Color.Red, Color.White)
path.AddPolygon(New Point() {p1, p2, p3})
e.Graphics.DrawPath(Pens.Red, path)
e.Graphics.FillPath(brush, path)
End Using | |
Schraffieren ohne HatchBrush | | | Autor: Bazi | Datum: 07.07.16 12:05 |
| Hallo,
ich exportiere gezeichnete Elemente mit PdfSharp in ein Pdf.
Leider kann PdfSharp kein HatchBrush.
Wie könnte man die Flächen sonst noch schraffieren?
Ich habe Kreisanschnitte (Parabelsegment),Kreisabschnitte (Tortenstück) , Kreise und diverse Polygone.
Die 2.Farbe ist Transparent, also würde es reichen Linien zu zeichnen. Aber wie komme ich an die Punkte?
Gruß Christian
Danke für die Hilfe
Gruß Christian | |
Re: Schraffieren ohne HatchBrush | | | Autor: Manfred X | Datum: 07.07.16 13:07 |
| Hallo!
Meinst Du so etwas ?????
Über den Parameter "Versetzung" wird der Winkel der Schraffur gesteuert,
durch das Vorzeichen dieses Wertes die Richtung der Linien.
Private Sub Schraffur(ByVal bmp As Bitmap, versetzung As Integer, _
breite As Integer, farbe As Drawing.Color, _
Optional ByVal crossed As Boolean = False)
Dim x As Integer
Using g As Graphics = Graphics.FromImage(bmp),
p As New Pen(farbe, breite)
For x = -Math.Abs(versetzung) To _
bmp.Width + Math.Abs(versetzung) Step breite * 3
g.DrawLine(p, New Point(x, 0), New Point(x + versetzung, bmp.Height))
Next x
End Using
If crossed Then
Schraffur(bmp, -versetzung, breite, farbe, False)
End If
End Sub | |
Re: Schraffieren ohne HatchBrush | | | Autor: Bazi | Datum: 07.07.16 13:43 |
| ja, im Prinzip schon. Jedoch nicht auf ein Bitmap, sondern das Innere einer beliebigen geschlossenen Figur.
Beispiel, ich habe ein Polygon bzw. dessen Points. Das zeichne ich via PdfSharp ins PDF mit
gfx.DrawPolygon(Pen, Brush, PointsArr, XFillMode.Winding) Nun würde ich das noch gerne schraffieren. Um schräge Linien rein zu zeichnen bräuchte ich Points, bei denen ich nicht weiß wie ich die berechnen soll.
Gruß Christian
Danke für die Hilfe
Gruß Christian | |
Re: Schraffieren ohne HatchBrush | | | Autor: Manfred X | Datum: 07.07.16 13:58 |
| Hallo!
Mit PDF-Zeichnungen kenne ich mich nicht aus.
Male die Figur in ein Bitmap-Objekt und schraffiere die gesamte Zeichen-Fläche
in einer Kennfarbe. Wenn Du die Fläche Deiner Figur in der Bitmap pixelweise
durchläufst, kannst Du die wg. Schraffur einzufärbenden Pixel erkennen.
Die Berechnung solcher Punkte im 2D-Raum bei komplexen Figuren ist aufwendig. | |
Re: Schraffieren ohne HatchBrush | | | Autor: Bazi | Datum: 07.07.16 14:32 |
| Hm, hab ich nun nicht wirklich verstanden.
Angenommen ich habe ein Dreieck, zeichne das mit Drei Linien in Rot in ein Bitmap.
Dann schraffiere ich das gesamte Bitmap in Blau.
Wie durchlaufe ich die Fläche meines Dreieckes pixelweise? Die gesamte Bitmap pixelweise wäre soweit kein Problem, aber mit dem Inneren meiner beliebigen Figur check ich das nicht.
Gefühlsmäßig wird das viel Rechenzeit in Anspruch nehmen, also bei einem Plan im Format DIN A0 bei dem etwa 1/3 der Fläche schraffiert wird zu lange dauern.
Gruß Christian
Danke für die Hilfe
Gruß Christian | |
Re: Schraffieren ohne HatchBrush | | | Autor: Bazi | Datum: 07.07.16 14:36 |
| ich werde mal schauen was für Möglichkeiten ich im PdfSharp mit dem LinearGradientBrush habe.
Danke für die Hilfe
Gruß Christian | |
Re: Schraffieren ohne HatchBrush | | | Autor: Manfred X | Datum: 07.07.16 15:37 |
| Du hast verschiedene Figuren und müßtest deshalb jeweils die Formeln für
die Schnittpunkte zwischen Schraffurlinien und Figurbegrenzungen programmieren.
Einfacher ist es, Du zeichnest den Umriß Deiner Figur in eine Bitmap,
in deren Rechteck sie hineinpaßt.
Eine zweite Bitmap der gleichen Größe wird schraffiert.
Es wären die Punkte zu suchen, die in der einen Bitmap die Farbe der Figur-
begrenzung besitzen und in der zweiten Bitmap die Schraffurfarbe (Schnittstellen).
Schnell geht das bei direktem Zugriff auf die Bild-Daten:
http://www.vbarchiv.net/workshop/workshop_100-direkte-manipulation-von-bilddaten-vb-2005.html
Die Größe ist nicht relevant, weil Du für die Schnittpunkt-Bestimmungen ggf.
die Zeichnungen über einen Zoomfaktor verkleinert verarbeiten kannst.
Beitrag wurde zuletzt am 07.07.16 um 15:50:08 editiert. | |
Re: Schraffieren ohne HatchBrush | | | Autor: Bazi | Datum: 07.07.16 16:30 |
| OK, mit 2 Bitmaps und die Pixelfarbe vergleichen leuchtet mir ein. Wobei ich das mit dem Link in diesem Zusammenhang noch nicht verstanden habe.
Und via Winkelfunktion dann berechnen welche Punkte zu verbinden sind?
Gruß Christian
Danke für die Hilfe
Gruß Christian | |
Re: Schraffieren ohne HatchBrush | | | Autor: Manfred X | Datum: 07.07.16 17:03 |
| Der direkte Zugriff auf die in ein Array ausgelesenen Bitmapdaten ist
erheblich schneller als die Getpixel/Setpixel-Methoden der Bitmapklasse. | |
Re: Schraffieren ohne HatchBrush | | | Autor: Bazi | Datum: 07.07.16 20:38 |
| ok, Danke
Ich probiere es.
Gruß Christian
Danke für die Hilfe
Gruß Christian | |
Re: Schraffieren ohne HatchBrush | | | Autor: VB3-Guru | Datum: 10.09.16 13:05 |
| Gib bei Google mal den Begriff "vector hatch" ein. Auf seite 2 der Ergebnisse findest du einen link zu einer deutschsprachigen Site...
VB.Net kann von Hause aus nur mit Bitmap-Hatches (Brushes) schraffieren. Das ist für Vektorgrafik aber nicht ausreichend. Man muss also jede Gerade der Schraffur selbst erzeugen.
Kürzlich bin ich über das hier gestolpert:
http://www.vb-helper.com/howto_hatch_nonstandard.html (ist allerdings VB6). Aber nach diesem Prinzip geht's wohl auch in VB.Net.
lg Vb3-Guru | |
Re: Schraffieren ohne HatchBrush | | | Autor: Bazi | Datum: 12.09.16 07:09 |
| Danke für den Link und die Infos.
Sieht interessant aus, auch wenn ich es derzeit noch nicht umsetzen kann.
Gruß Christian
Danke für die Hilfe
Gruß Christian | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|