Pixelfarbe erkennen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Pixelfarbe erkennen

    Moin

    Habe ein Frage zu der ich noch keine Antwort fand, auch bei G... nicht.
    Könnt ihr mir Helfen.

    Ich habe eine Form in der sich eine PictureBox befindet.
    Nun möchte ich gern, das wenn ich in die PictureBox Klicke den Farbwert des Pixels bekomme.

    Bin für jede Antwort Dankbar. :)

    Gruß
    FKF

    Edit: Nutzen tue ich VB2010
    ziemlich umständlich - scheint aber zu funzen

    VB.NET-Quellcode

    1. Private Function GetColorUnderMouse() As Color
    2. Using bmp = New Bitmap(1, 1), g = Graphics.FromImage(bmp)
    3. g.CopyFromScreen(Control.MousePosition, Point.Empty, New Size(1, 1))
    4. Return bmp.GetPixel(0, 0)
    5. End Using
    6. End Function

    VB.NET-Quellcode

    1. Private Function GetColor(Location As Point) As Color
    2. Return New Bitmap(PictureBox1.Image).GetPixel(Location.X, Location.Y)
    3. End Function


    Nicht getestet, sollte aber funktionieren.

    Aufrufen würdest du das Ganze dann zum Beispiel im MouseDown-Event der Picturebox:

    VB.NET-Quellcode

    1. Private Sub PictureBox1_MouseDown(...) Handles PictureBox1.MouseDown
    2. Dim FarbeUnterDemMauszeiger As Color = GetColor(e.Location)
    3. End Sub

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Erstmal Vielen Dank euch beiden. :thumbsup:

    @ vb-checker

    Bei deinem Code bekomme ich diese Fehlermeldung.

    Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "New" ohne einschränkende Konvertierung aufgerufen werden kann:
    "Public Sub New(original As System.Drawing.Image)": Der mit dem Argument übereinstimmende Parameter "original" wird von "Object" auf "System.Drawing.Image" reduziert.
    "Public Sub New(stream As System.IO.Stream)": Der mit dem Argument übereinstimmende Parameter "stream" wird von "Object" auf "System.IO.Stream" reduziert.
    "Public Sub New(filename As String)": Der mit dem Argument übereinstimmende Parameter "filename" wird von "Object" auf "String" reduziert. C:\Users\Chef\documents\visual studio 2010\Projects\BeschussAuswertung\Beschu2012\Form1.vb

    Gruß FKF
    Beim mir läuft der Code ohne Probleme. Habe es gerade extra getestet. Führst du ihn aus, bevor der Picturebox ein Bild zugewiesen wurde, oder wenn die Image-Eigenschaft Nothing ist?

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Dank dir, das du es extra Getestet hast.

    Ich war etwas blind auf den Augen. (bei mir = Picture1.Image / bei dir =
    PictureBox1.Image) Sorry! :evil:
    ----------------------------------------------------------------------


    Edit :


    DANKE !!! :thumbup:
    Alles super.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „fkf“ ()

    Moin

    Habe das Thema zwar als Erledigt markiert, aber ich muss noch ne Frage stellen.

    Und zwar ist mir aufgefallen, das die ermittelten Werte nicht stimmen können.
    Habe mein wenig Code als Dateianhang mit gesendet.
    Wo ist da der Fehler. ?(

    Gruß FKF

    PS. Können die Admin's das Erledigt entfernen ? DANKE
    Dateien
    • code.txt

      (2,05 kB, 182 mal heruntergeladen, zuletzt: )
    Punkt 1:
    Code gehört ins FOrum, nicht in Textdateien. Dafür haben wir schließlich den [vb]-Tag.

    Punkt 2:
    Stelle Option Strict auf On und behebe alle Fehler in deinem Code. Erst dann können wir weiter machen. Wie du Option Strict anschaltest, findest du bei Google. Alternativ einfach "Option Strict On" an den Beginn deines Codes schreiben.

    Punkt 3: Das On Error GoTo blabla würde ich auch sofort löschen.

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    ich habe es nicht getestet, kann mir aber vorstellen, dass es zu fehlern kommen WIRD wenn das bild größer ist als die Picturebox!
    Annahme: Picturebox: 50x50Pixel , Image: 300x300Pixel. In der Picturebox ist das komplette Bild zu sehen, da es wahrscheinlich gescaled wird. Klickst du nun auf die Picturebox (P=25,25) wird der pixel auf dem Image von dieser Position genommen und nicht von 150,150 wie es richtig wäre.

    Wie man das löst, kp. Der Code vom ErfinderDesRades müsste das Problem aber umgehen, da er ja einen Screenshot der PB erstellt (=>scaliertes Bild) und somit die richtige Position überprüft.

    dann natürlich die 3 punkte vom vb-checker beachten

    lg
    Dank euch.
    Das ihr so viel Geduld mit mir habt.

    @ FreakJNS
    Ja das war's.

    Wie man das löst, kp. Der Code vom ErfinderDesRades müsste das Problem aber umgehen, da er ja einen Screenshot der PB erstellt (=>scaliertes Bild) und somit die richtige Position überprüft.
    Habe es jetzt so gemacht.


    @ vb-checker
    Code gehört ins FOrum, nicht in Textdateien. Dafür haben wir schließlich den [vb]-Tag.
    Asche auf mein Haupt.
    Hatte es gestern schon mit dem VB Button versucht.
    Aber da hat er mir den Code hintereinander eingestellt.

    Stelle Option Strict auf On und behebe alle Fehler in deinem Code. Erst dann können wir weiter machen. Wie du Option Strict anschaltest, findest du bei Google. Alternativ einfach "Option Strict On" an den Beginn deines Codes schreiben.
    Alternativ "Option Strict On" ist nachgeholt.

    Das On Error GoTo blabla würde ich auch sofort löschen.
    War klar das dass nicht gern gesehen ist.
    Werde mich bei Google einlesen, btr. Fehlerbehandlung.

    Gruß FKF