Farbe eines Pixels


8

Schreiben Sie ein Programm, das die RGB-Farbe eines bestimmten Pixels auf dem Bildschirm druckt.

Das Programm sollte eine Zeile von stdin im Format lesen x,y, wobei x und y Ganzzahlen ohne Vorzeichen sind. Das Pixel (0,0) ist das Pixel oben links auf dem Bildschirm.

Das Programm sollte dann eine Zeile an stdout im Format ausgeben RRR,GGG,BBB, die die Farbe des Pixels bei ( x, y) darstellt.

RRR, GGGUnd BBBsollte Gleitkommazahlen zwischen 0 und 1 sein OR ganze Zahlen im Bereich [0, 255]. Führende Nullen spielen zum Beispiel keine Rolle: beide 074und 74sind akzeptabel.

Undefiniertes Verhalten

Es ist in Ordnung, dass das Programm unter den folgenden Bedingungen ein undefiniertes Verhalten zeigt (Absturz, falsche Ausgabe usw.):

  • Der Benutzer gibt eine Zeichenfolge, eine vorzeichenbehaftete Ganzzahl, einen Gleitkommawert oder einen anderen ungültigen Datentyp ein
  • Die Benutzereingabe hat nicht das Format x,y
  • Das angegebene Pixel befindet sich außerhalb des Bildschirms

Anmerkungen:

  • Das Programm kann das Pixel bei den angegebenen Koordinaten nicht ändern.
  • Wenn Sie mehrere Monitore haben, spielt es keine Rolle, auf welchem ​​Monitor sich das Pixel befindet, solange bei jeder Programmausführung derselbe Monitor verwendet wird.

Die Antwort mit den wenigsten Bytes gewinnt.


24
Warum soll RRR, GGGund BBBsein Gleitpunkte zwischen 0 und 1? Normalerweise sind sie ganze Zahlen im Bereich [0,255]. Ich würde vorschlagen, beides zuzulassen.
Kevin Cruijssen

4
Können wir unsere Lösungen auf das Fenster beschränken, in dem sie ausgeführt werden, zugunsten von Sprachen, die außerhalb dieses Fensters auf nichts auf dem Bildschirm zugreifen können?
Shaggy

7
Wenn Sie nur das 0 zulassen - 1 - Format sollten Sie nicht verwenden RRR, GGGund BBBin der Spezifikation, aber R, G,B
sergiol

6
Was ist, wenn wir mehrere Monitore haben?
tsh

7
Es kann sinnvoll sein anzugeben, dass das Programm das Pixel an der angegebenen Koordinate nicht ändern kann. Andernfalls ist es möglicherweise effizienter, den gesamten Bildschirm zu verdunkeln und zurückzukehren 0, 0, 0, wodurch der Zweck der Herausforderung zunichte gemacht wird.
Maxb

Antworten:


10

Java 10 (Lambda-Funktion), 105 75 Bytes

x->y->(new java.awt.Robot().getPixelColor(x,y)+"").replaceAll("[^\\d,]","")

Eine Funktion, die zwei Ganzzahlparameter verwendet und einen String zurückgibt RRR,GGG,BBB, wobei die Farben Ganzzahlen im Bereich sind [0, 255].

-30 Bytes dank @LukeStevens, indem die java.awt.ColorStandardausgabe verwendet toString()und so geändert wird, dass nur die Ziffern und Kommas übrig bleiben.

Erläuterung:

x->y->                      // Method with two integer parameters and String return-type
  (new java.awt.Robot()     //  Create a AWT-Robot instance
    .getPixelColor(x,y)     //  Get the pixel AWT-Color at position x,y
    +"")                    //  Call the default toString() of the AWT-Color
                            //   i.e. "java.awt.Color[r=213,g=230,b=245]"
  .replaceAll("[^\\d,]","") //  Remove everything except for digits and commas

HINWEIS: Die Standardimplementierung toString()von war meines Wissens in java.awt.Colorallen JVM-Versionen immer dieselbe, kann sich jedoch möglicherweise in Zukunft ändern. Ich habe es sowohl in Java 8 als auch in Java 10 getestet und es ist zurückgekehrt "java.awt.Color[r=#,g=#,b=#]".


Aber da die Herausforderung lautet:

  • Volles Programm
  • Eingabe im Format x,yvon STDIN
  • Ausgabe im Format R,G,Ban STDOUT
  • Haben die R, G, Bals Punkte im Bereich Schwimm[0.0, 1.0]

Der Code wird viel ausführlicher:

Java 10 (Vollprogramm), 266 Bytes

interface M{static void main(String[]a)throws Exception{var s=new java.util.Scanner(System.in).next().split(",");var c=new java.awt.Robot().getPixelColor(new Short(s[0]),new Short(s[1]));System.out.print(c.getRed()/255d+","+c.getGreen()/255d+","+c.getBlue()/255d);}}

Erläuterung:

interface M{          // Class
  static void main(String[]a)
                      //  Mandatory main method
    throws Exception{ //    Mandatory throws clause for `new Robot()`
  var s=new java.util.Scanner(System.in)
                      //   Create a Scanner for STDIN
         .next()      //   Get the String user input
         .split(","); //   Split it on "," and save it as String-array in `s`
  var c=new java.awt.Robot()
                      //   Create a AWT-Robot instance
         .getPixelColor(
                      //   And get the pixel AWT-Color at position:
           new Short( //    Convert String to Short (and implicitly to int):
            s[0]),    //     x-coordinate input by user from String-array `s`
           new Short( //    Convert String to Short (and implicitly to int):
            s[1]));   //     y-coordinate input by user from String-array `s`
  System.out.print(   //   Print to STDOUT:
   c.getRed()         //    The red part of RGB as integer in the range [0,255]
    /255d             //     Converted to a floating point in the range [0.0, 1.0]
   +","               //    Appended with a comma delimiter
   +c.getGreen()      //    Appended with the green part of RGB as integer in the range [0,255]
     /255d            //     Converted to a floating point in the range [0.0, 1.0]
   +","               //    Appended with a comma delimiter
   +c.getBlue()       //    Appended with the blue part of RGB as integer in the range [0,255]
     /255d);}}        //     Converted to a floating point in the range [0.0, 1.0]

2
Für die erste Antwort mit losen Regeln können Sie die Colors String-Konvertierung verwenden und haben einfach x->y->(new java.awt.Robot().getPixelColor(x,y)+"").replaceAll("[^\\d,]","")75 Bytes
Luke Stevens

@LukeStevens Intelligente Verwendung der Standardeinstellung toString()von java.awt.Color. Vielen Dank!
Kevin Cruijssen

Gute Arbeit, Leute, du hast mich geschlagen: Ich war auch damit beschäftigt, den toString()Weg zu implementieren ... ;-) Außer ich musste eine IDE herunterladen, um all das zu tun: Ich benutze jetzt nur TIO :(
Olivier Grégoire

3
Beachten Sie, dass der Javadoc sehr klar Color::toStringist , dass die Implementierung nach eigenem Ermessen erfolgt. Es kann daher sinnvoll sein, anzugeben, welche JVM für die Tests verwendet wurde (dies funktioniert wie bei OpenJDK und Oracle JDK).
Olivier Grégoire

1
Schließlich sollten Sie ersetzen " "mit ","dem strengen einzuhalten RRR,GGG,BBBFormat (nicht RRR GGG BBB).
Olivier Grégoire

9

6502 Maschinencode (C64), 280 260 Byte

00 C0 A2 00 20 CF FF C9 0D 9D 02 C1 F0 03 E8 D0 F3 20 D2 FF A5 7A 85 FB A5 7B
85 FC A9 01 85 7A A9 C1 85 7B 20 73 00 20 6B A9 A5 14 85 FD A5 15 85 FE 20 73
00 20 6B A9 A5 FB 85 7A A5 FC 85 7B A5 14 4A 4A 4A AA 20 F0 E9 A5 FD 46 FE 6A
4A 4A A8 A5 14 29 07 AA A9 00 38 6A CA 10 FC 85 FE B1 D1 0A 26 FC 0A 26 FC 0A
26 FC 85 FB A5 D2 29 03 09 D8 85 D2 B1 D1 85 02 A9 02 18 2D 18 D0 0A 0A 65 FC
29 0F 09 D0 85 FC A9 33 85 01 A5 FD 29 07 A8 B1 FB A2 37 86 01 25 FE D0 05 AD
21 D0 85 02 A6 D6 20 F0 E9 A5 02 29 0F AA BC D2 C0 20 BC C0 BC E2 C0 20 B7 C0
BC F2 C0 A9 2C 20 D2 FF 98 0A A9 30 90 02 A9 31 20 D2 FF A9 2E 20 D2 FF 98 29
7F 4C D2 FF 30 B0 35 35 36 33 32 39 36 33 38 33 35 37 34 37 30 B0 32 38 32 37
32 39 33 32 34 33 35 B0 34 37 30 B0 32 38 36 33 36 34 32 30 34 33 35 36 39 37

Ich habe erwartet, dass dies in viel weniger Bytes möglich sein wird, aber leider ... nun, seit ich fertig bin und es jetzt sowieso poste. Zumindest hat das restriktive Format bei einer Sache geholfen: Ähnliches wie stdin(Eingabe von einem aktuellen Gerät) gibt es nur auf dem C64 im Textmodus, da das Betriebssystem nur diesen Modus unterstützt - daher müssen keine anderen Modi des Grafikchips berücksichtigt werden .

Hinweis zur Ausgabe der Farbwerte: Der C64-Grafikchip verwendet keine RGB-Farben, sondern erzeugt direkt ein Videosignal mit YUV-Farben und einer festen 16-Farben-Palette. Ich benutzen gerundete Werte der colodore Umwandlung in RGB mit „default“ Monitoreinstellungen hier.

-20 Bytes : Bessere Ausgaberoutine, Codierung der 3-Zeichen-Ausgabe pro Farbkanal in einem einzelnen Byte.

Zum Kommentar: Es ist theoretisch möglich, mit dem Standard-C64-Betriebssystem sogar den mehrfarbigen Zeichenmodus des VIC zu verwenden, es ist jedoch eine benutzerdefinierte Schriftart erforderlich, die mit nur 4 horizontalen Pixeln mit doppelter Breite tatsächlich lesbar ist. Nicht ganz unmöglich, aber sehr unwahrscheinlich. Ebenso verlängert Farbmodus (oder erweiterten Hintergrundmodus, die die gleiche ist) könnte mit dem C64 O verwendet wird, erfordert jedoch direkt auf den Grafikchip neu zu konfigurieren. Ich entscheide mich, all diese Möglichkeiten im Sinne des Code-Golfspiels hier zu ignorieren: Es ist nicht die Standardumgebung, die Sie auf einem Commodore 64 mit laufendem Standardbetriebssystem finden. Was mit dem Standard-Betriebssystem möglich ist, ist das Umschalten zwischen zwei integrierten Schriftarten (Umschalt + Commodore-Taste). Das Programm berücksichtigt dies.

Online-Demo

Verwendung: um SYS49152zu beginnen.

Kommentierte Demontage :

         00 C0       .WORD $C000        ; load address
.C:c000  A2 00       LDX #$00           ; loop index for input
.C:c002   .input:
.C:c002  20 CF FF    JSR $FFCF          ; character from input device
.C:c005  C9 0D       CMP #$0D           ; compare with enter
.C:c007  9D 16 C1    STA .buf,X         ; store to buffer
.C:c00a  F0 03       BEQ .parse         ; was enter -> start parsing
.C:c00c  E8          INX                ; next character
.C:c00d  D0 F3       BNE .input         ; and repeat input loop
.C:c00f   .parse:
.C:c00f  20 D2 FF    JSR $FFD2          ; output the enter character
.C:c012  A5 7A       LDA $7A            ; save pointer of BASIC parser
.C:c014  85 FB       STA $FB
.C:c016  A5 7B       LDA $7B
.C:c018  85 FC       STA $FC
.C:c01a  A9 15       LDA #$15           ; set pointer of BASIC parser to
.C:c01c  85 7A       STA $7A            ; buffer-1
.C:c01e  A9 C1       LDA #$C1
.C:c020  85 7B       STA $7B
.C:c022  20 73 00    JSR $0073          ; get next character
.C:c025  20 6B A9    JSR $A96B          ; BASIC routine to parse number
.C:c028  A5 14       LDA $14            ; lowbyte of parsed number to $fd
.C:c02a  85 FD       STA $FD
.C:c02c  A5 15       LDA $15            ; highbyte to $fe
.C:c02e  85 FE       STA $FE
.C:c030  20 73 00    JSR $0073          ; get next character
.C:c033  20 6B A9    JSR $A96B          ; parse as number ...
.C:c036  A5 FB       LDA $FB            ; restore pointer of BASIC parser
.C:c038  85 7A       STA $7A
.C:c03a  A5 FC       LDA $FC
.C:c03c  85 7B       STA $7B
.C:c03e  A5 14       LDA $14            ; load y coordinate
.C:c040  4A          LSR A              ; divide by 8 for character row
.C:c041  4A          LSR A
.C:c042  4A          LSR A
.C:c043  AA          TAX                ; -> to X
.C:c044  20 F0 E9    JSR $E9F0          ; set pointer to character row
.C:c047  A5 FD       LDA $FD            ; divide x coordinate by 8
.C:c049  46 FE       LSR $FE
.C:c04b  6A          ROR A
.C:c04c  4A          LSR A
.C:c04d  4A          LSR A
.C:c04e  A8          TAY                ; -> to Y
.C:c04f  A5 14       LDA $14            ; load y coordinate
.C:c051  29 07       AND #$07           ; mask pixel position in character
.C:c053  AA          TAX                ; -> to X
.C:c054  A9 00       LDA #$00           ; initialize pixel mask to 0
.C:c056  38          SEC                ; set carry for bit to shift in
.C:c057   .bitnum:
.C:c057  6A          ROR A              ; shift bit in mask
.C:c058  CA          DEX                ; and repeat until
.C:c059  10 FC       BPL .bitnum        ; in correct position
.C:c05b  85 FE       STA $FE            ; store pixel mask to $fe
.C:c05d  B1 D1       LDA ($D1),Y        ; load character code
.C:c05f  0A          ASL A              ; multiply by 8
.C:c060  26 FC       ROL $FC
.C:c062  0A          ASL A
.C:c063  26 FC       ROL $FC
.C:c065  0A          ASL A
.C:c066  26 FC       ROL $FC
.C:c068  85 FB       STA $FB            ; and store to $fb/$fc
.C:c06a  A5 D2       LDA $D2            ; move pointer to position in color RAM
.C:c06c  29 03       AND #$03
.C:c06e  09 D8       ORA #$D8
.C:c070  85 D2       STA $D2
.C:c072  B1 D1       LDA ($D1),Y        ; load color of character
.C:c074  85 02       STA $02            ; and store to $2
.C:c076  A9 02       LDA #$02           ; check which charset is active
.C:c078  18          CLC
.C:c079  2D 18 D0    AND $D018
.C:c07c  0A          ASL A              ; and calculate offset
.C:c07d  0A          ASL A
.C:c07e  65 FC       ADC $FC            ; add to (character code * 8)
.C:c080  29 0F       AND #$0F
.C:c082  09 D0       ORA #$D0           ; and add offset to character ROM
.C:c084  85 FC       STA $FC
.C:c086  A9 33       LDA #$33           ; bank in character ROM
.C:c088  85 01       STA $01
.C:c08a  A5 FD       LDA $FD            ; load y coordinate
.C:c08c  29 07       AND #$07           ; mask pixel-row number
.C:c08e  A8          TAY
.C:c08f  B1 FB       LDA ($FB),Y        ; load pixel row from character ROM
.C:c091  A2 37       LDX #$37           ; bank out character ROM
.C:c093  86 01       STX $01
.C:c095  25 FE       AND $FE            ; apply pixel mask
.C:c097  D0 05       BNE .pixelcol      ; not 0 -> pixel is set
.C:c099  AD 21 D0    LDA $D021          ; otherwise load background color
.C:c09c  85 02       STA $02            ; and store to $2
.C:c09e   .pixelcol:
.C:c09e  A6 D6       LDX $D6            ; restore screen row pointer for
.C:c0a0  20 F0 E9    JSR $E9F0          ; current cursor position
.C:c0a3  A5 02       LDA $02            ; load color
.C:c0a5  29 0F       AND #$0F           ; mask low nibble (only 16 colors)
.C:c0a7  AA          TAX                ; -> to X
.C:c0a8  BC D2 C0    LDY .red,X         ; load encoded output for red
.C:c0ab  20 BC C0    JSR .out2          ; call output without comma
.C:c0ae  BC E2 C0    LDY .green,X       ; load encoded output for green
.C:c0b1  20 B7 C0    JSR .out1          ; call output with comma
.C:c0b4  BC F2 C0    LDY .blue,X        ; load encoded output for blue
.C:c0b7   .out1:
.C:c0b7  A9 2C       LDA #$2C           ; load ","
.C:c0b9  20 D2 FF    JSR $FFD2          ; and output
.C:c0bc   .out2:
.C:c0bc  98          TYA                ; encoded output to A
.C:c0bd  0A          ASL A              ; shift top bit to carry
.C:c0be  A9 30       LDA #$30           ; load "0"
.C:c0c0  90 02       BCC .firstdig      ; carry clear -> to output
.C:c0c2  A9 31       LDA #$31           ; load "1"
.C:c0c4   .firstdig:
.C:c0c4  20 D2 FF    JSR $FFD2          ; and output
.C:c0c7  A9 2E       LDA #$2E           ; load "."
.C:c0c9  20 D2 FF    JSR $FFD2          ; and output
.C:c0cc  98          TYA                ; encoded output to A
.C:c0cd  29 7F       AND #$7F           ; mask out top bit
.C:c0cf  4C D2 FF    JMP $FFD2          ; to output and exit
.C:c0d2   .red:                                 ; encoded values for red
.C:c0d2  30 B0 35 35 .BYTE $30,$B0,$35,$35      ; ASCII digit ($30-$39) after
.C:c0d6  36 33 32 39 .BYTE $36,$33,$32,$39      ; decimal point, with bit 7
.C:c0da  36 33 38 33 .BYTE $36,$33,$38,$33      ; indicating 0 or 1 before
.C:c0de  35 37 34 37 .BYTE $35,$37,$34,$37      ; decimal point
.C:c0e2   .green:                               ; encoded values for green
.C:c0e2  30 B0 32 38 .BYTE $30,$B0,$32,$38      ; ...
.C:c0e6  32 37 32 39 .BYTE $32,$37,$32,$39
.C:c0ea  33 32 34 33 .BYTE $33,$32,$34,$33
.C:c0ee  35 B0 34 37 .BYTE $35,$B0,$34,$37
.C:c0f2   .blue:                                ; encoded values for blue
.C:c0f2  30 B0 32 38 .BYTE $30,$B0,$32,$38      ; ...
.C:c0f6  36 33 36 34 .BYTE $36,$33,$36,$34
.C:c0fa  32 30 34 33 .BYTE $32,$30,$34,$33
.C:c0fe  35 36 39 37 .BYTE $35,$36,$39,$37
.C:c102   .buf:                                 ; buffer for input ("stdin")

Dies scheint den Mehrfarbenmodus nicht zu unterstützen .
Nwellnhof

Natürlich nicht, es funktioniert mit dem ursprünglichen Betriebssystem. Technisch gesehen funktioniert dieses Betriebssystem in jedem VIC-Modus, aber es wird nur Müll auf dem Bildschirm angezeigt, sodass es nicht verwendet werden kann. Aber Ihr Kommentar hat mich an den "erweiterten Farbmodus" erinnert, der ziemlich gut mit Standard-Betriebssystemen funktioniert ... verdammt
Felix Palmen

@nwellnhof fügte einige Überlegungen hinzu, ich hoffe, das ist angenehm.
Felix Palmen

Man fragt sich, ob das Schreiben in C kürzer wäre?

@Rogem könnten versuchen , dass mit cc65.. durchaus möglich :) aber zumindest der kompilierte Code wird größer sein :)
Felix Palmen

6

TI-BASIC (TI-83/84 +), 22 Bytes

Da der Bildschirm schwarzweiß ist, müssen wir nur testen, ob das angegebene Pixel ein- oder ausgeschaltet ist, und dies auf schwarzes oder weißes RGB abbilden. Außerdem sind die Pixel nur über Zeilen und Spalten in dieser Reihenfolge zugänglich, weshalb die Koordinaten umgekehrt werden.

Prompt X,Y
255
Ans-{Ans,Ans,Ans}pxl-Test(Y,X

1
Beachten Sie, dass dies bei Farb-TI-Taschenrechnern (wie dem TI-84 Plus CE) nicht funktioniert.
pizzapants184

Sind Sie sicher über die Anzahl der Bytes? Ich zähle 22.
lirtosiast

2

Bash, 103/86 Bytes

Mit einer strengen Interpretation der Spezifikation (Eingabe von STDIN und Ausgabe von STDOUT sind beide durch Kommas getrennt):

read x
import -window root -crop 1x1+${x/,/+} ppm:-|od -dj13|awk 'NR<2{n=2^16;print$2/n","$3/n","$4/n}'

Mit einem lockeren Eingabeformat (plus-getrennte Eingabe als Befehlszeilenargument, durch Leerzeichen getrennte Ausgabe:

import -window root -crop 1x1+$1 ppm:-|od -dj13|awk 'NR<2{n=2^16;print$2/n,$3/n,$4/n}'

Hängt von Imagemagick, Awk und Coreutils ab.


2

TI-Nspire-Assembly - 112 Byte

50 52 47 00 30 40 2D E9 FF FF FF FA 00 F0 17 F8
04 1C 00 F0 14 F8 85 00 2D 18 AD 01 2D 19 6C 00
C0 21 09 06 09 69 08 5B 3F 25 42 09 2A 40 1F 25
03 1C 2B 40 C1 0A 29 40 0A A0 0A DF 30 BD 00 20
0A 23 07 49 10 25 8A 69 2A 42 FC D1 0A 68 FF 25
2A 40 30 3A 0B DB 85 00 2D 18 6D 00 A8 18 F1 E7
00 00 02 90 25 64 2C 25 64 2C 25 64 0A 00 70 47

Dieses Programm gibt Ganzzahlen im Bereich von 0 bis 31 für R und B und 0 bis 63 für G aus, da das Gerät nativ einen RGB565-Framebuffer verwendet. Es verwendet serielle für die Ein- und Ausgabe.

Quelle:

.string "PRG"
push {r4, r5, lr}
blx main
.thumb
main:
@ read x and y from serial into r4 and r0
bl read_int
mov r4, r0
bl read_int

@ turn x and y into framebuffer offset
@ r4 = ((r0 * 320) + r4) * 2
lsl r5, r0, #2
add r5, r0
lsl r5, #6
add r5, r4
lsl r4, r5, #1

@ load pixel from framebuffer
@ r0 = ((uint16_t **)0xc0000000)[0x10][r4 / 2]
mov r1, #0xC0
lsl r1, #24
ldr r1, [r1, #0x10]
ldrh r0, [r1, r4]

@ unpack RGB565 value into r1, r2, r3
mov r5, #0x3f
lsr r2, r0, #5
and r2, r5
mov r5, #0x1f
mov r3, r0
and r3, r5
lsr r1, r0, #11
and r1, r5

@ call printf
adr r0, fmt
swi #10

@ return
pop {r4, r5, pc}

@ subroutine to read an integer from serial
read_int:
mov r0, #0
mov r3, #10
ldr r1, serial_base
@ loop until characters come in on serial
2:
mov r5, #(1<<4) 
1:
ldr r2, [r1, #0x18]
tst r2, r5
bne 1b
@ read character from serial and mask out status bits
ldr r2, [r1]
mov r5, #0xff
and r2, r5
@ subtract 48 ('0') from byte; if result is negative, return
sub r2, #48
blt 1f
@ multiply existing numbers by 10 and add new number to them
lsl r5, r0, #2
add r5, r0
lsl r5, #1
add r0, r5, r2
b 2b

serial_base:.word 0x90020000
fmt:.string "%d,%d,%d\n"
@ this instruction is over here because serial_base and fmt need to be word-aligned
1:bx lr

2

Bash unter Linux mit xserver, 30 Bytes

xset dpms force off;echo 0,0,0

Unter Verwendung der Idee, die in meinem Kommentar zur Frage vorgestellt wurde, sollte diese Lösung die Anzeigeausgabe vollständig ausschalten und dann das Echo wiedergeben, dass der Bildschirm tatsächlich schwarz ist.

Ich habe auch darüber nachgedacht xbacklight =0, aber das ändert nichts an den Pixelfarben.


+1 für das Auffinden der Lücke, aber ich habe die Einschränkungen aktualisiert.
eeze

1

Python 2 + PIL-Bibliothek, 96 91 Bytes

import PIL.ImageGrab as i
print','.join('%.1f'%(x/255.)for x in i.grab().getpixel(input()))

Implementiert die Spezifikation buchstäblich wie gewünscht. Nur Windows - funktioniert nicht unter Linux und erzeugt zusätzliche Ausgabe (Alpha-Wert) auf Mac.


from PIL import ImageGrab as ifrom PIL import*, i.grabImageGrab.grab.
Erik der Outgolfer

@Erik das gilt nicht für PIL. PIL importiert nur die explizit aufgelisteten Namen.
ovs

@ovs, Ah, das ist wahrscheinlich das Problem, warum ich den __import__('...')Weg nicht auch zum Laufen bringen konnte .
Kirill L.

Beachten Sie, dass dies unter macOS einen Alpha-Wert ausgibt, sodass nur die Spezifikation unter Windows eingehalten wird.
ovs

@ovs, OK, gut zu wissen, danke.
Kirill L.

1

Mathematica, 69 Bytes

Nur die Funktion ist 34 Bytes.

CurrentScreenImage[]~PixelValue~#&

Nimmt Eingaben in der Form {x, y} vor.

Das Bild ist das Zusammenführen von Bildern auf allen Monitoren. Wenn Sie einen bestimmten Bildschirm wünschen, verwenden Sie den Integer-Index - z CurrentScreenImage[1]

Das vollständige Programm genau wie angegeben ist 69 Bytes CurrentScreenImage[]~PixelValue~ToExpression["{"<>InputString[]<>"}"]


1

AutoHotKey, 113 Bytes

CoordMode,Pixel
InputBox,x
InputBox,y
PixelGetColor,c,x,y
MsgBox % c&255 . "," . c>>8&255 . "," . c>>16&255

Verwenden Sie Dialogfelder anstelle von stdin / stdout.



0

Bash + Coreutils + Scrot + Netpbm, 90 Bytes

scrot -e'pngtopnm $f'|(read a;read w h;read m;head -c$((3*(w*$2+$1)))>f;od -t u1 -N3 -An;)

Lose E / A-Version

Nimmt xund yals separate Befehlszeilenargumente.

Drucke r, g, bwie Ints 0-255 auf getrennten Leitungen


Bash + Coreutils + Scrot + Netpbm + BC + Sed, 172 Bytes

IFS=, read x y
scrot -e'pngtopnm $f'|(read a;read w h;read m;head -c$((3*(w*$y+$x)))>f;od -vw1 -tu1 -N3 -An|while read p;do bc<<<"scale=2;$p/$m"|tr '\n' ,;done;)|sed s/,$//

Strikte E / A-Version

Eingabe auf stdin als x,y

Ausgabe auf stdout als r.rr,g.gg,b.bb(kein Zeilenumbruch).


@ Shaggy nicht mehr - siehe die Updates
eeze

0

TI-BASIC (TI-83/84 +), 15 Bytes

Input Y
255not(rand(3)pxl-Test(Y,Ans

Nimmt eine Ganzzahl von Ansund eine von der Eingabeaufforderung. rand(3)Erstellt eine Liste mit 3 Zufallszahlen ungleich Null, sodass das Produkt Null ist, wenn das Pixel dunkel ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.