Farbe eines Pixels eines Graphics-Objekt herausfinden (effiziente Lösung gesucht)

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von n1nja.

    Farbe eines Pixels eines Graphics-Objekt herausfinden (effiziente Lösung gesucht)

    Hallo,

    ich bin ziemlich neu im Bereich VB.NET. Nun habe ich folgendes Problem:

    Ich möchte aus einer ImageBox die Farbe eines Pixels bestimmen. Bisher mache ich das so:

    VB.NET-Quellcode

    1. 'get the pixel color
    2. Using bmpOnePixel As New Bitmap(1, 1)
    3. 'copy the pixel at the mouse position into the bitmap
    4. Using gB As Graphics = Graphics.FromImage(bmpOnePixel)
    5. 'gB.CopyFromScreen(MousePosition, New Point(0, 0), New Size(1, 1))
    6. Dim gImg As Graphics
    7. gImg = imgBox.CreateGraphics()
    8. gImg.CopyFromScreen(x + Me.Location.X + 16, y + Me.Location.Y + 38, x + Me.Location.X + 16, y + Me.Location.Y + 38, New Size(1, 1))
    9. End Using
    10. 'get the color of the captured pixel
    11. R = bmpOnePixel.GetPixel(0, 0).R
    12. G = bmpOnePixel.GetPixel(0, 0).G
    13. B = bmpOnePixel.GetPixel(0, 0).B
    14. End Using


    Allerdings bringt das zwei Probleme mit sich:
    1. Sobald der Rahmen nicht genau so dick ist, wie bei meinen Tests, ist das Bild verschoben
    2. Das ganze Konstrukt ist unglaublich langsam. Ich rufe die Funktion bis zu ungefähr 60.000mal auf; das dauert
    Gibt es also noch eine bessere Lösung, die schneller und universeller ist? Wichtig ist mir auch, dass diese Lösung nicht nur mit Bitmaps funktioniert, das wäre zu einfach. Am besten sollte sie mit allen Bildern funktionieren, die ich in eine ImageBox malen kann.
    Twitch Viewer Display Chat-, Zuschauer- und Statistiktool für Streamer
    Hi
    was ist eine ImageBox? Und zeichne doch einfach auf eine Bitmap und stelle diese dar. Dann kannst du auch einfach über GetPixel herausfinden, welche Farbe der gewählte Pixel hat. Bei großen Bereichen wäre LockBits zu empfehlen. Dazu gibt's ein paar Samples im Forum, u.A. hier Tutorial: LockBits . Auch die folgenden Postings wären interessant.

    Gruß
    ~blaze~
    Willkommen im Forum. :thumbup:

    newcat schrieb:

    VB.NET-Quellcode

    1. 'get the color of the captured pixel
    2. R = bmpOnePixel.GetPixel(0, 0).R
    3. G = bmpOnePixel.GetPixel(0, 0).G
    4. B = bmpOnePixel.GetPixel(0, 0).B
    Hier rufst Du 3 Mal die GetPixel()-Funktion auf, das ist nicht sinnvoll.
    Hole Dir das entsprechende Pixel in ein Color-Objekt und lies dies aus:

    VB.NET-Quellcode

    1. Dim col = bmpOnePixel.GetPixel(0, 0)
    2. R = col.R
    3. G = col.G
    4. B = col.B
    oder verwende gleich das col-Objekt statt der Einzel-Werte R, G, B.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!