Moin, Moin,
Ich möchte in einem Bild eine weiße Fläche mit bestimmter Größe finden (z.B. 100x30 px). An diese Stelle möchte ich später etwas zeichnen. Das bekomme ich hin.
Mein Problem ist jetzt, dass meine momentane Methode seehr langsam ist. (Mehrere Sekunden für eine Zeile).
Ich hoffe ihr könnt mi helfen einen Ansatz zu finden. ;)
Gruß HamburgerJungeJr
Hier mein bisheriger Code:
PS. Hoffe es gibt noch kein Thema dazu. Ich wusste nicht, nach was ich suchen soll. :D
Ich möchte in einem Bild eine weiße Fläche mit bestimmter Größe finden (z.B. 100x30 px). An diese Stelle möchte ich später etwas zeichnen. Das bekomme ich hin.
Mein Problem ist jetzt, dass meine momentane Methode seehr langsam ist. (Mehrere Sekunden für eine Zeile).
Ich hoffe ihr könnt mi helfen einen Ansatz zu finden. ;)
Gruß HamburgerJungeJr
Hier mein bisheriger Code:
VB.NET-Quellcode
- Dim MinBreite As Integer = 100
- Dim MinHöhe As Integer = 100
- it = New ImageTraverser(PictureBox1.Image)
- Dim c()() As Integer = it.ToArray()
- Dim Toleranz As Integer = CInt(765 * (1 - ((100 - 100) / 100)))
- Dim Frei As List(Of Point) = New List(Of Point)
- Dim Flächen As List(Of Point) = New List(Of Point)
- Fläche = New Rectangle(0, 0, MinBreite, MinHöhe)
- For Y = 0 To it.ImageHeight - 1
- For X = 0 To it.ImageWidth - 1
- Dim f As Color = Color.FromArgb(c(Y)(X))
- If CDbl(f.R) + CDbl(f.G) + CDbl(f.B) >= Toleranz Then
- Frei.Add(New Point(X, Y))
- End If
- Next
- Next
- Dim Arr() As Point = Frei.ToArray()
- For Y = Frei(0).Y To it.ImageHeight - Fläche.Height
- For X = 0 To it.ImageWidth - Fläche.Width
- 'Flächen = Frei.FindAll(Function(Punkt) Fläche.Contains(Punkt)) ' Alternative zu Arr.Count()
- If Arr.Count(Function(Punkt) Punkt.X >= Fläche.X And Punkt.Y >= Fläche.Y) = Fläche.Height * Fläche.Width Then
- Debug.Print("a")
- GoTo Abbruch
- Else
- Fläche.X = X
- End If
- Next
- Fläche.X = 0
- Fläche.Y = Y
- Next
- Abbruch:
- For Y = Fläche.Y To Fläche.Y + Fläche.Height
- For X = Fläche.X To Fläche.X + Fläche.Width
- it.SetPixel(X, Y, Color.Yellow)
- Next
- Next
PS. Hoffe es gibt noch kein Thema dazu. Ich wusste nicht, nach was ich suchen soll. :D