Hi,
es tritt ein komisches Phänomen auf.
Mit meinem Kantendetektionsprogramm kann ich, wie einige wissen, das Innere das GraphicsPaths auf ein neues Bild übertragen. Dies geschieht wie folgt:
Spoiler anzeigen
[/vbnet]
Das klappt auch immer super – außer, wenn ich mit GIMP das Original skaliere (Seitenverhältnis bleibt aber, nur die Maße werden geändert). Dann ist der Bereich verschoben. Nach links und nach oben. Siehe Anhang. In Zeile 68 habe ich geschaut, was in
Hat das etwas mit GIMP zu tun? Die dots per inch sind dieselben (72). Die Kompressionsqualität des JPEGs auch (100%).
es tritt ein komisches Phänomen auf.
Mit meinem Kantendetektionsprogramm kann ich, wie einige wissen, das Innere das GraphicsPaths auf ein neues Bild übertragen. Dies geschieht wie folgt:
VB.NET-Quellcode
- [vbnet]
- Imports System.Drawing.Drawing2D
- Imports Microsoft.WindowsAPICodePack.Dialogs
- Public NotInheritable Class AllesGrafische
- Public Shared Sub Paint_the_Rectangle(ByVal g As Graphics, ByVal recta As Rectangle)
- If g IsNot Nothing Then
- g.SmoothingMode = SmoothingMode.AntiAlias
- g.CompositingQuality = CompositingQuality.HighQuality
- g.PixelOffsetMode = PixelOffsetMode.HighQuality
- g.InterpolationMode = InterpolationMode.HighQualityBilinear
- Using Pen_Hellblau As Pen = New Pen(Color.FromArgb(0, 200, 255), 1.0F)
- g.DrawRectangle(Pen_Hellblau, recta)
- End Using
- End If
- End Sub
- Public Shared Sub Draw_Curve(ByVal g As Graphics, ByVal theList As List(Of Point))
- If theList IsNot Nothing AndAlso theList.Count > 0 AndAlso g IsNot Nothing Then
- g.SmoothingMode = SmoothingMode.AntiAlias
- g.CompositingQuality = CompositingQuality.HighQuality
- g.PixelOffsetMode = PixelOffsetMode.HighQuality
- g.InterpolationMode = InterpolationMode.HighQualityBilinear
- Dim theList_neu As New List(Of Point)
- Using gp As New GraphicsPath
- For i As Integer = 1 To theList.Count - 1 Step 1
- Dim a As Integer = theList(i).X
- Dim b As Integer = theList(i).Y
- Dim c As Integer = theList(i - 1).X
- Dim d As Integer = theList(i - 1).Y
- Dim Entfernungsbetrag As Double = Math.Sqrt(Math.Pow(a, 2) + Math.Pow(b, 2) + Math.Pow(c, 2) + Math.Pow(d, 2) - 2 * a * c - 2 * b * d)
- If Entfernungsbetrag < Form1.erlaubte_Entfernung Then
- theList_neu.Add(theList(i))
- End If
- Next
- If theList_neu.Count = 0 Then Return
- gp.AddLines(theList_neu.ToArray())
- Using Pen_hellrosa As Pen = New Pen(Color.FromArgb(255, 64, 239), 1.0F)
- g.DrawPath(Pen_hellrosa, gp)
- End Using
- If Form1.ClosePath Then
- gp.CloseFigure()
- End If
- If Form1.CheckBox1.Checked Then
- Dim Speicherpfad As String
- Using SFD1 As New CommonSaveFileDialog
- SFD1.Title = "Wo soll das Bild gespeichert werden?"
- SFD1.Filters.Add(New CommonFileDialogFilter("PNG", ".png"))
- If System.IO.Directory.Exists("C:\Users\...\source\repos\VB.NET\Get mouse position and draw rectangle on screen") Then
- SFD1.InitialDirectory = "C:\Users\...\source\repos\VB.NET\Get mouse position and draw rectangle on screen"
- Else
- SFD1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
- End If
- If SFD1.ShowDialog = CommonFileDialogResult.Ok Then
- Speicherpfad = SFD1.FileName & ".png"
- Else
- Return
- End If
- End Using
- Using bmpSource As Bitmap = New Bitmap(Form1.Pfad_Bild)
- Dim rectCutout As RectangleF = gp.GetBounds()
- Using m As Matrix = New Matrix()
- m.Translate(-rectCutout.Left, -rectCutout.Top)
- gp.Transform(m)
- End Using
- Using bmpCutout As Bitmap = New Bitmap(CInt(Math.Round(rectCutout.Width, 0)), CInt(Math.Round(rectCutout.Height, 0)))
- Using graphicsCutout As Graphics = Graphics.FromImage(bmpCutout)
- graphicsCutout.Clip = New Region(gp)
- graphicsCutout.DrawImage(bmpSource, -rectCutout.Left, -rectCutout.Top)
- bmpCutout.Save(Speicherpfad, Imaging.ImageFormat.Png)
- Form1.CheckBox1.Checked = False
- End Using
- End Using
- End Using
- End If
- End Using
- End If
- End Sub
- End Class
Das klappt auch immer super – außer, wenn ich mit GIMP das Original skaliere (Seitenverhältnis bleibt aber, nur die Maße werden geändert). Dann ist der Bereich verschoben. Nach links und nach oben. Siehe Anhang. In Zeile 68 habe ich geschaut, was in
rectCutout
drin steht. Alles in Ordnung.Hat das etwas mit GIMP zu tun? Die dots per inch sind dieselben (72). Die Kompressionsqualität des JPEGs auch (100%).