Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Probleme mit FastGraphicsLib » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
imax2010

Ich hab auch schon andere probiert. Eine funktionierte erst gar nicht, da immer nur wirres zeug in der Textbox ausgab(fast identisch mit der FastGraphicsLib) und die andere in c# braucht auch (zumindest bei mir) einige Zeit zum auslesen der Pixel also fast vergleichbar mit bmp.GetPixel() aber ich versuchs weiterhin (bis da verwend ich das bmp.GetPixel). Sollte ich was brauchbares finden meld ich mich wieder!
eulerscheZahl

Dank .net kann man ja vieles in verschiedenen Sprachen verwenden, so ist es z.B. ohne Probleme möglich, oben verlinkte Bibliothek mit C# zu nutzen. Das geht natürlich auch in die andere Richtung, da sollten also schon vernüftige Bibliotheken zur Verfügung stehen.
Trotzdem würde ich nicht zu Basic raten, einfach weil die Verbreitung recht gering ist und sich entsprechend weniger Codebeispiele finden lassen.
Airblader

Ich habe zwar keine Ahnung, wie groß die VB-Community ist, aber ich kann mir nicht vorstellen, dass es nur eine einzige, frei erhältliche Bibliothek für solche elementare Funktionen gibt, die dann obendrauf noch kaputt ist.
imax2010 großes Grinsen

Nein muss es nicht aber scheinbar ist es so, dass die Lib schneller ist als b,p.GetPixel() aber ich hab auch bereits mit dem angefangen, nur hatte ich irgendwo ein Problem mit den Koordinaten bzw. er ging nicht in y-richtung weiter. Aber danke für deinen Code Funktioniert Perfekt!
Für eine eigene Lib mir Marshalling reicht mein Wissen bei weitem nicht (mach das nur Hobbymäsig).

Aber danke trotzdem für die Hilfe!

Mfg
Imax2010
eulerscheZahl

Ja, das ist das, was aus der .dll noch an Code rauszuziehen war.

Muss es denn unbedingt diese .dll sein oder kannst du dich auch mit dem Gedanken anfreunden, dir selbst ein paar Funktionen zu schreiben?

Das wäre alles viel einfacher, wenn ich VisualBasic könnte, habe mich trotzdem mal dran versucht:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
Public Class Form1

    Public Function FindPixel(ByVal farbe As Color, ByVal bmp As Bitmap) As List(Of Point)
        Dim x, y As Integer
        Dim liste As List(Of Point) = New List(Of Point)
        For x = 0 To bmp.Width - 1
            For y = 0 To bmp.Height - 1
                If bmp.GetPixel(x, y) = farbe Then
                    liste.Add(New Point(x, y))
                End If
            Next
        Next
        Return liste
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim bmp As Bitmap = PictureBox1.Image
        Dim farbe As Color = Color.FromArgb(0, 0, 0)
        Dim liste As List(Of Point) = FindPixel(farbe, bmp)
        ListBox1.Items.Clear()
        For Each p As Point In liste
            ListBox1.Items.Add(p.ToString())
        Next
    End Sub
End Class

Habe es nicht näher getestet, den einzelnen schwarzen Punkt habe ich damit aber gefunden.
imax2010

Wäre das der Code der Lib?

Ich hab beobachtet, dass wenn ich in Paint ein 20x20px Feld mache mit der Auflößung(der Datei) 400x400 dann bekomm ich die richtigen Rechenwerte sprich 400px heraus. Verwende ich einen Kreis (d=60) bzw. ein Rechteck mit 160x60 so verfehlt er beim Rechteck um ca. 2000px und bei Kreis kommen statt 2827 nur 360 heraus.
eulerscheZahl

Habe mir mal den Code angeschaut:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
Public Function FindPixel(ByVal cl As Color, ByVal Optional varianz As Byte = 0) As Point()
    Dim list As New List(Of Point)
    Dim num4 As Integer = ((Me.bmp1.Width * Me.bmp1.Height) - 1)
    Dim i As Integer = 0
    Do While (i <= num4)
        Dim color As Color = Color.FromArgb(Marshal.ReadInt32(Me.p, i))
        If ((((((color.R >= If(((cl.R - varianz) < 0), 0, CByte((cl.R - varianz)))) And (color.R <= If(((cl.R + varianz) > &HFF), &HFF, CByte((cl.R + varianz))))) And (color.G >= If(((cl.G - varianz) < 0), 0, CByte((cl.G - varianz))))) And (color.G <= If(((cl.G + varianz) > &HFF), &HFF, CByte((cl.G + varianz))))) And (color.B >= If(((cl.B - varianz) < 0), 0, CByte((cl.B - varianz))))) And (color.B <= If((CByte((cl.B + varianz)) > &HFF), &HFF, CByte((cl.B + varianz))))) Then
            Dim y As Integer = CInt(Math.Round(CDbl(((CDbl(i) / CDbl(Me.bmpdata.Width)) / 3))))
            Dim x As Integer = CInt(Math.Round(CDbl(((CDbl(i) / 3) - (y * Me.bmpdata.Width)))))
            Dim item As New Point(x, y)
            list.Add(item)
        End If
        i = (i + 3)
    Loop
    Return list.ToArray
End Function

mir ist nicht klar, warum i immer gleich um 3 erhöht wird verwirrt
imax2010

Also ich hab das jetzt auf so abgeändert:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Dim fg As FastGraphicsLib.FastGraphics = FastGraphicsLib.FastGraphics.FromBitmap(PictureBox1.Image)        
Dim p As Array = fg.FindPixel(Color.Black, 10)        
If p.Length > 0 Then              
For Each a As Point In fg.FindPixel(Color.Black, 10)                 ListBox1.Items.Add(a.X)                
ListBox2.Items.Add(a.Y)             
Next             
fg.Unlock()        
Else            
TextBox1.Text = "kein Punkt gefunden"            
fg.Unlock()        
 End If


und es listet mir alle punkte auf. Ich versuch jetzt herauszufinden welche die mindestanzahl an pixel ist (mit 8 px gehts auch nicht).

//Edit
Es ist interessant: Ich mache mit Paint ein20x20 "Rechteck" in schwarz und dann sagt er mir es sind 296 Pixel? Müssten es nicht 400 sein?
eulerscheZahl

Bei mir das selbe: ein Punkt allein wird nicht gefunden, erst ein dicker Batzen.

Und da hat das x auch noch ein negatives Vorzeichen.
setzt man das zu +, so liegt der gefundene Punkt immer noch um ein Pixel daneben, also im Weißen.
Die Bibliothek ist wohl nicht perfekt.
imax2010

Cool danke jetzt gibt er mir ein Koordinatenpaar aus.
Ich sehen du nimmst das ".FromScreen" d.h. dass er die aktuelle Form als Quelle nimmt oder? Ich möchte das aber von nur in der Picturebox gesucht wird.

".FromBitmap(Picturebox1.Image)" aber da steht dann nur kein Punkt gefunden. (Die Grafik ist eine Bitmapgrafik mit exakt einem Pixel (schwarz auf x=82 und y= 173).

//Edit:

Wenn ich ein Linie Mache dann bekomm ich ein Koordinatenppar angezeigt, jedoch nicht wenn nur 1 Punkt vorhanden ist.
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.