Farbe eines Pixels feststellen

Startseite Foren Deutsches LiveCode-Forum Farbe eines Pixels feststellen

Schlagwörter: 

Ansicht von 5 Antwort-Themen
  • Autor
    Beiträge
    • #14065
      Torsten
      Teilnehmer

        Hi,

        ich möchte die Farbe eines bestimmten Pixels (z.B. 100,100) in einem Image feststellen. Mit mousecolor kann man das machen, muss aber immer händisch arbeiten. Geht es auch per Script?

        Beste Grüße
        Torsten

      • #14067
        Torsten
        Teilnehmer

          Habs gefunden, ist leider kein direkter Befehl, sondern man muss ein bisschen arbeiten:

          Beispiel-Stack: http://forums.livecode.com/viewtopic.php?t=17655

          Der Weg: in der imageData eines Images sind die Pixelinfos sortiert nach der Position von links oben nach rechts unten. ImageData ist eine lange Reihe von Bytes. Jedes Pixel braucht 4 Byte für seine Farbangabe, d.h. man muss immer diese Sprünge machen:

          Code:

          
             put the imageData of image "meinBild.jpg" into tData
             put the width of image "meinBild.jpg" into tWidth
             put the height of image "meinBild.jpg" into tHeight
             
             ask "put the column and row of the pixel whose RGB value you want"
             
             put item 1 of it  into tColumn
             put item 2 of it - 1 into tRow
             
             put tWidth * tRow * 4 into tAllRows
             put tColumn * 4 into tTheColumns
             put tAllRows + tTheColumns into tByte -- for loc 1,1 it gives byte 4, see above how the 4 bytes of the pixel work
                
                -- we want byte 2 to 4 of the pixel
             put charToNum (char tByte - 2 of tData) into tRed -- byte 
             put charToNum (char tByte - 1 of tData) into tGreen
             put charToNum (char tByte of tData) into tBlue
             put tRed & comma & tGreen & comma & tBlue into tWholeRGB
             
             answer "the RGB value of pixel " & tColumn  & "," & tRow +1 & " is" & cr  & cr & tWholeRGB
          

          Ich mach daraus mal eine Funktion und poste den Code hier in den Strang.

          Beste Grüße
          Torsten

        • #14071
          Klaus Major
          Administrator

            Hi Torsten,

            Du kannst aber doch mit -> „the screenMouseLoc“ den Cursor an die gewünschte Stelle im Bild plazieren, „the mousecolor“ ermitteln und den Cursor wieder resetten. Alles per Skript, woll?! 🙂

            Gruß

            Klaus

          • #14073
            Torsten
            Teilnehmer

              Aaah, super, geht sogar für andere Fenster 🙂

              Gibt es jetzt noch einen Trick, dass er bei screenMouseLoc einen Mausklick in das Fenster (welches ein anderes Programm ist) auslöst?

              Momentan mache ich das mit Cliclick (https://www.bluem.net/de/projekte/cliclick/), was auch gut funktioniert, aber wenn es direkt aus LC heraus gehen würde, wäre das umso besser.

              Beste Grüße
              Torsten

            • #14075
              Klaus Major
              Administrator

                Nein, alles ausserhalb von LC können wir nicht kontrollieren.
                Obwohl Du mal „click at das_LOC_ausserhalb_von_LC“ probieren könntest, wer weiß…

                Am Mac geht vielleicht was mit AppleScript.
                Unter Windows? Keine Ahnung.

              • #14077
                Torsten
                Teilnehmer

                  Hi Klaus,

                  das Klicken in fremden Fenstern geht auf dem Mac super mit Cliclick (https://www.bluem.net/de/projekte/cliclick/)
                  Aus Livecode heraus dann mit dem shell-Command starten:
                  put shell(„/usr/local/bin/cliclick c:100,100“)

                  Schöner wäre es, wenn es direkt aus LC gehen würde, aber so funzt es auch ganz gut.

                  Unter Windows gibt es wohl ein Tool namens „Mouse Move“, habe ich aber nicht ausprobiert, da auch Mac-User 🙂

              Ansicht von 5 Antwort-Themen
              • Du musst angemeldet sein, um auf dieses Thema antworten zu können.