Pixel Farbe

Von: , Frage gestellt am So, 4. Nov 2007

Hallo Experten!

Mal wieder eine Frage meinerseits:

Wie kann ich aus einem Bild die Fabe eines bestimmten Pixels auslesen?
z.B. brauche ich die Farbe des Pixels 390/350

Vielen Dank im Vorraus

Rodario

5 Antworten zu dieser Frage

  1. Antwort von nach 4 Minuten 0 hilfreich
    Re: Pixel Farbe

    Hallo Rodario, Wie kann ich aus einem Bild die Fabe eines bestimmten Pixels
    auslesen?
    z.B. brauche ich die Farbe des Pixels 390/350
    mit Point. Das ist mal wieder abhängig vom Steuerelement, meist wird das wohl ein Picture sein.

        Dim Farbe As Long
        Dim x As Integer
        Dim y As Integer
        Farbe = Picture1.Point(x, y)
    


    Gruß, Rainer

    • Antwort von nach 8 Minuten 0 hilfreich
      Re^2: Pixel Farbe

      Hallo Rainer!

      Das ging aber shnell!

      Danke
      Radario

      • Antwort von nach einem Tag 0 hilfreich
        Re^3: Pixel Farbe

        Hallo,
        picturebox.point(x,y) ist aber deutlich langsamer als die Variante, die von "anno74" vorgestellt wurde!

        --> mit point(x,y) könnte man auch die Farbe setzen, nicht nur auslesen (wenn ich das richtig im Kopf habe), das geht aber mit der WindowsAPI deutlich schneller.

        Gruß,
        AlexR

        • Antwort von nach einem Tag 0 hilfreich
          Re^4: Pixel Farbe

          Hallo, picturebox.point(x,y) ist aber deutlich langsamer als die
          Variante, die von "anno74" vorgestellt wurde!
          ja, klar. Aber für einen einzelnen Pixel würde ich trotzdem die einfache Variante wählen. --> mit point(x,y) könnte man auch die Farbe setzen,
          Nein, das wäre dann PSet(x,y) nicht
          nur auslesen (wenn ich das richtig im Kopf habe), das geht
          aber mit der WindowsAPI deutlich schneller.
          Natürlich. Es kommt eben immer darauf an, was man vor hat, wie viel gelesen werden soll, wie zeitkritisch die Anwendung ist ...
          Wenn ganze Bereiche verglichen werden sollen, kann man die ausschneiden, in ein Bytearray schieben ... Es gibt immer mehrere Möglichkeiten, für manche Anwendungen gibt es dann eine Beste. :-)

          Gruß, Rainer

  2. Antwort von nach 4 Stunden 0 hilfreich
    Re: Pixel Farbe

    Hallo Rodario,


    das kannst du auch via der API GetPixel.
    Musst aber aufpassen.Handlet es sich um eine Systemfarbe, so musst du sie noch umwandeln.

    Ansonsten bekommst du die einzelnen Anteile (Rot/Gruen/Blau) via

    RotAnteil = OriginalPixelFarbe Mod 256
    GruenAnteil = (OriginalPixelFarbe \ 256) Mod 256
    BlauAnteil = OriginalPixelFarbe \ 256 \ 256
    
    oder Alternativ
    
    RotAnteil= OriginalPixelFarbe  And vbRed
    GruenAnteil= (OriginalPixelFarbe And vbGreen) \ &h100
    BlauAnteil= (OriginalPixelFarbe And vbBlue)  \ &h10000
    


    Man sollte halt nur wissen das die gemischte Farbe unter VB ( wenn sie als Long vorliegt) in der Form &HBBGGRR vorliegen ;)

    Noch einmal schnell zu der Thematik Systemfarbe :) ( ich hab grad langeweile :) )

    Am besten ist es, vorher zu prüfen ob es sich um eine Systemfarbe handelt. Wenn ja, dann wandle sie um und lasse dir danach die Farben zurueckgeben. wenn nicht, dann eben gleich die Farben zurueckgeben lassen. Aber nun fragst du dich sicherlich wie du herausbekommst ob es sich um eine Systemfarbe handelt. Nun das ist ganz einfach!
    Ist die Farbe and &H80000000 = True so handelt es sich um eine Systemfarbe :)

    Praktisch gesehen, würde das so ausschauen

    Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
    
    
    Public Sub GetColor(Farbe as long)
    If Farbe And &H80000000 Then
     GetFarbe = GetSysColor(Color And &H7FFFFFFF)
    Else
     GetFarbe Color
    End If
    End Sub
    
    Private Sub GetFarbe(Color as Long)
     msgbox "Die Anteile der Farbe: " & Color & " sind" & vbnewline & "Rot: " & Color  And vbRed & vbnewline & "Gruen: " & (Color And vbGreen) \ &h100 & vbnewline & "Blau: " & (Color And vbBlue)  \ &h10000
    End sub
    


    MfG Alex [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!