Warna Piksel

8

Tulis program yang mencetak warna RGB dari piksel yang diberikan pada layar.

Program harus membaca baris dari stdin dalam format x,y, di mana x dan y adalah bilangan bulat yang tidak ditandatangani. Pixel (0,0) adalah piksel kiri atas pada layar.

Program kemudian harus menampilkan garis ke stdout dalam format RRR,GGG,BBB, yang mewakili warna piksel pada ( x, y).

RRR,, GGGdan BBBharus angka titik-mengambang antara 0 dan 1, ATAU bilangan bulat dalam rentang [0, 255]. Angka nol di depan tidak penting, misalnya: keduanya 074dan 74dapat diterima.

Perilaku tidak terdefinisi

Tidak apa-apa bagi program untuk menunjukkan perilaku tidak terdefinisi (crash, memberikan output yang salah, dll) dalam kondisi berikut:

  • Pengguna memasukkan string, integer bertanda, float, atau tipe data tidak valid lainnya
  • Input pengguna tidak dalam format x,y
  • Pixel yang ditentukan di luar layar

Catatan:

  • Program tidak dapat memodifikasi piksel pada koordinat yang diberikan.
  • Jika Anda memiliki banyak monitor, tidak masalah monitor mana yang pikselnya aktif, selama monitor yang sama digunakan setiap kali program dijalankan.

Jawaban dengan byte paling sedikit menang.

eeze
sumber
24
Mengapa harus RRR,, GGGdan BBBmenjadi titik mengambang antara 0 dan 1? Biasanya mereka bilangan bulat dalam kisaran [0,255]. Saya sarankan untuk mengizinkan keduanya.
Kevin Cruijssen
4
Bisakah kita membatasi solusi kita ke jendela yang sedang mereka jalankan, untuk kepentingan bahasa yang tidak dapat mengakses apa pun di layar di luar jendela itu?
Shaggy
7
Jika Anda mengizinkan hanya 0 - Format 1 Anda tidak harus menggunakan RRR, GGGdan BBBdi spec, tapi R, G,B
sergiol
6
Bagaimana jika kita memiliki beberapa monitor?
tsh
7
Mungkin bernilai untuk menentukan bahwa program tidak dapat memodifikasi piksel pada koordinat yang diberikan. Kalau tidak, akan lebih efisien untuk menggelapkan seluruh layar dan kembali 0, 0, 0, mengalahkan tujuan tantangan.
Maks

Jawaban:

10

Java 10 (fungsi lambda), 105 75 byte

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

Sebuah fungsi mengambil dua parameter integer dan mengembalikan sebuah String RRR,GGG,BBB, di mana warnanya adalah integer dalam range [0, 255].

-30 byte terima kasih kepada @LukeStevens dengan menggunakan keluaran java.awt.Colordefault toString()dan memodifikasinya sehingga hanya digit dan koma yang tersisa.

Penjelasan:

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

CATATAN: toString()Implementasi default dari java.awt.Colorselalu sama di versi JVM sejauh yang saya tahu, tetapi berpotensi berubah di masa depan. Saya mengujinya di Java 8 dan Java 10 dan kembali "java.awt.Color[r=#,g=#,b=#]".


Tapi, karena tantangannya menyatakan:

  • Program lengkap
  • Mengambil input dalam format x,ydari STDIN
  • Output dalam format R,G,Bmenjadi STDOUT
  • Memiliki R, G, Bseperti mengambang poin dalam kisaran[0.0, 1.0]

Kode menjadi BANYAK lebih bertele-tele:

Java 10 (program penuh), 266 byte

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);}}

Penjelasan:

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]
Kevin Cruijssen
sumber
2
Untuk jawaban pertama, aturan longgar, Anda dapat memanfaatkan konversi Colors String dan cukup x->y->(new java.awt.Robot().getPixelColor(x,y)+"").replaceAll("[^\\d,]","")dengan 75 byte
Luke Stevens
@LukeStevens Cerdas menggunakan default toString()dari java.awt.Color. Terima kasih!
Kevin Cruijssen
Kerja bagus, kalian mengalahkan saya: Saya sibuk menerapkan toString()cara juga ... ;-) Kecuali saya harus mengunduh IDE untuk melakukan semua itu: Saya hanya menggunakan TIO sekarang :(
Olivier Grégoire
3
Perhatikan bahwa Javadoc sangat jelas yaitu Color::toStringimplementasi-diskresioner. Jadi mungkin lebih baik untuk menentukan JVM mana yang digunakan untuk pengujian (ini berfungsi seperti halnya dengan OpenJDK dan Oracle JDK).
Olivier Grégoire
1
Akhirnya, Anda harus mengganti " "dengan ","untuk mematuhi RRR,GGG,BBBformat ketat (bukan RRR GGG BBB).
Olivier Grégoire
9

6502 kode mesin (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

Saya berharap ini akan dimungkinkan dalam byte yang jauh lebih sedikit, tapi sayangnya ... well, karena saya menyelesaikannya, mempostingnya sekarang. Setidaknya, format restriktif membantu dengan satu hal: Sesuatu yang mirip dengan stdin(input dari perangkat saat ini) hanya ada pada C64 dalam mode teks, karena OS hanya mendukung mode ini - jadi tidak perlu mempertimbangkan mode lain dari chip grafis .

Catatan pada output nilai warna: chip grafis C64 tidak menggunakan warna RGB tetapi secara langsung menghasilkan sinyal video dengan warna YUV, dengan palet 16 warna tetap. Saya menggunakan nilai bulat dari konversi colodore ke RGB dengan pengaturan monitor "default" di sini.

-20 byte : rutin keluaran yang lebih baik, menyandikan keluaran 3 karakter per saluran warna dalam satu byte.

Mengenai komentar: Secara teori dimungkinkan untuk menggunakan mode karakter bahkan multicolor dari VIC dengan OS C64, tetapi membutuhkan font khusus yang benar-benar dapat dibaca dengan hanya 4 piksel horizontal dengan lebar dua kali lipat. Bukan sepenuhnya mustahil, tetapi sangat tidak mungkin. Demikian juga, mode warna yang diperluas (atau mode latar yang diperluas, yang sama) dapat digunakan dengan OS C64, tetapi mengharuskan untuk mengkonfigurasi ulang chip grafis secara langsung. Saya memilih untuk mengabaikan semua kemungkinan ini dalam arti kode golf di sini: Ini bukan lingkungan standar yang Anda temukan di Commodore 64 dengan menjalankan OS persediaan. Apa yang mungkin dengan OS persediaan beralih di antara dua font bawaan (shift + komodor key), program tidak memperhitungkan itu.

Demo online

Penggunaan: SYS49152untuk memulai.

Berkomentar pembongkaran :

         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")
Felix Palmen
sumber
Ini sepertinya tidak mendukung mode multicolor .
nwellnhof
Tentu saja tidak, ini berfungsi dengan OS asli. Secara teknis, OS ini bekerja dalam mode VIC apa pun, tetapi hanya akan ada sampah di layar, sehingga tidak dapat digunakan. Tetapi komentar Anda membuat saya ingat "mode warna yang diperluas", yang bekerja cukup baik dengan OS persediaan ... sialan
Felix Palmen
@nwellnhof menambahkan beberapa alasan tentang itu, saya harap ini menyenangkan.
Felix Palmen
Membuat orang bertanya-tanya apakah menulis ini dalam C akan lebih pendek?
@Rogem bisa mencobanya dengan cc65.. sangat mungkin :) tetapi setidaknya, kode yang dikompilasi akan lebih besar :)
Felix Palmen
6

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

Karena layarnya hitam dan putih, kita hanya perlu menguji apakah piksel yang ditentukan hidup atau mati dan memetakannya ke RGB hitam atau putih. Juga, piksel hanya dapat diakses melalui baris dan kolom dalam urutan itu, jadi itu sebabnya koordinatnya terbalik.

Prompt X,Y
255
Ans-{Ans,Ans,Ans}pxl-Test(Y,X
kamoroso94
sumber
1
Perhatikan bahwa ini tidak berfungsi pada kalkulator TI berwarna (Seperti TI-84 Plus CE).
pizzapants184
Apakah Anda yakin tentang jumlah byte? Saya hitung 22.
lirtosiast
2

bash, 103/86 byte

Dengan interpretasi yang ketat dari spec (input dari STDIN dan output pada STDOUT keduanya dipisahkan koma):

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

Dengan format input yang lebih longgar (input yang dipisahkan plus sebagai argumen baris perintah, output yang dipisahkan spasi:

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

Tergantung pada imagemagick, awk, dan coreutils.

Gagang pintu
sumber
2

Perakitan TI-Nspire - 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

Program ini menghasilkan bilangan bulat dalam kisaran 0-31 untuk R dan B dan 0-63 untuk G, karena perangkat ini menggunakan framebuffer RGB565. Ini menggunakan serial untuk input dan output.

Sumber:

.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
pbfy0
sumber
2

Bash di Linux dengan xserver, 30 byte

xset dpms force off;echo 0,0,0

Menggunakan ide yang disajikan dalam komentar saya pada pertanyaan, solusi ini harus mematikan output display sepenuhnya, dan kemudian menggemakan bahwa layar memang hitam.

Saya juga berpikir untuk menggunakan xbacklight =0, tetapi itu tidak mengubah warna piksel.

maks
sumber
+1 untuk menemukan celah, tetapi saya memperbarui kendala.
tenang
1

Pustaka Python 2 + PIL, 96 91 byte

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

Menerapkan spesifikasi secara harfiah seperti yang diminta. Hanya Windows - tidak bekerja di Linux, dan menghasilkan output tambahan (nilai alfa) pada Mac.

Kirill L.
sumber
from PIL import ImageGrab as ifrom PIL import*, i.grabImageGrab.grab.
Erik the Outgolfer
@Erik, ini bukan untuk PIL. PIL hanya mengimpor nama yang terdaftar secara eksplisit.
ovs
@ovs, Ah, itu mungkin masalah mengapa saya tidak bisa juga membuat __import__('...')cara kerjanya.
Kirill L.
Perhatikan bahwa ini menghasilkan nilai alfa pada macOS, sehingga hanya mematuhi spesifikasi pada Windows.
Ov
@ovs, OK, senang tahu, terima kasih.
Kirill L.
1

Mathematica, 69 Bytes

Hanya fungsinya 34 byte.

CurrentScreenImage[]~PixelValue~#&

Mengambil input dalam bentuk {x, y}.

Gambar adalah penggabungan gambar pada semua monitor. Jika Anda menginginkan layar tertentu, gunakan indeks integer - mis CurrentScreenImage[1]

Program lengkap persis seperti yang ditentukan adalah 69 Bytes CurrentScreenImage[]~PixelValue~ToExpression["{"<>InputString[]<>"}"]

Kelly Lowder
sumber
1

AutoHotKey, 113 byte

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

Gunakan kotak dialog alih-alih stdin / stdout.

tsh
sumber
0

Bash + coreutils + scrot + netpbm, 90 byte

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

Versi I / O longgar

Mengambil xdan ysebagai argumen baris perintah yang terpisah.

Cetakan r, g, bsebagai int 0-255 pada baris yang berbeda


Bash + coreutils + scrot + netpbm + bc + sed, 172 byte

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/,$//

Versi I / O yang ketat

Masukan pada stdin sebagai x,y

Output pada stdout as r.rr,g.gg,b.bb(no newline).

pizzapants184
sumber
@Shaggy tidak lagi - lihat pembaruan
eeze
0

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

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

Mengambil satu integer dari Ansdan satu dari prompt. rand(3)membuat daftar 3 angka acak bukan nol, sehingga produk adalah nol jika pikselnya gelap.

lirtosiast
sumber