Jumlah warna, disortir berdasarkan kejadian

14

Yang ini mudah dijelaskan dan saya hampir tidak bisa percaya bahwa ini tidak pernah main golf sebelumnya:

Untuk gambar yang diberikan (format apa pun yang didukung oleh bahasa Anda), temukan warna-warna unik dan hasilkan daftar warna.

  • Cetak kode warna dalam hex RGB, yaitu tanda pagar #diikuti oleh 2 digit untuk R, 2 digit untuk G dan 2 digit untuk B. (di #xxxxxxmana x dapat 0-9, AF dan / atau af).
  • Kode hex harus diikuti oleh spasi dan jumlah piksel desimal, kemudian baris baru ( \natau \r\n).
  • Daftar harus disortir berdasarkan jumlah menurun (warna paling sering di bagian atas).
  • Jika ada dasi (dua warna dengan jumlah yang sama), urutannya tidak penting.
  • Gambar tidak akan mengandung transparansi, jadi nilai alfa apa pun tidak penting. Nilai alpha mungkin bukan bagian dari output.
  • Ukuran gambar 4000x3000 harus didukung (yang penting untuk mengetik definisi)

Contoh gambar "10red 20blue 30black 40white": Contoh gambar 1

Output yang diharapkan:

#FFFFFF 40
#000000 30
#0000FF 20
#FF0000 10

Contoh gambar "gradien biru": Contoh gambar 2

Salah satu output yang diharapkan (karena urutan warna yang sama dapat bervariasi):

#718DFF 19
#5571FF 15
#3855FF 11
#8DAAFF 11
#1C38FF 7
#AAAAFF 7
#8D8DFF 6
#AAC6FF 6
#C6C6FF 5
#C6E2FF 4
#001CFF 3
#E2E2FF 3
#FFFFFF 3

Contoh gambar "testImage", mohon disediakan oleh @Luis Mendo :

Contoh gambar 3

Output yang diharapkan:

#FFFFFF 18042
#000000 1754
#FF3300 204

Mirip dengan pertanyaan ini , tetapi hasilnya adalah teks, bukan gambar.

Thomas Weller
sumber
count descendingagak tidak jelas. Bagaimana kita mengatasinya?
R
@ EᴀsᴛᴇʀʟʏIʀᴋ: turun: warna paling sering di atas
Thomas Weller
Oke, saya akan mengatakan bahwa itu perlu sedikit lebih jelas. Mungkin mengatakan sesuatu seperti the most frequent colors at the top?
R
@ EᴀsᴛᴇʀʟʏIʀᴋ: Saya setuju, baru saja memperbarui pertanyaan untuk keduanya
Thomas Weller
1
Beberapa test case akan bagus.
Martin Ender

Jawaban:

4

Mathematica, 91 byte

StringRiffle@SortBy[Tally["#"<>IntegerString[#,16,2]&/@Join@@#~ImageData~"Byte"],-Last@#&]&

Menggunakan metode yang sama sekali berbeda dari jawaban @ DavidC . Tidak seperti itu, ini dapat mendukung gambar dengan ukuran dan jumlah warna apa pun. Penjelasan:

#~ImageData~"Byte"                   Take the RGB values of the image...
Join@@(...)                          Flatten to a list of colors...
"#"<>IntegerString[#,16,2]&/@(...)   Convert each color to #012def format...
Tally[(...)]                         Convert to a list of {color, multiplicity}
                                      pairs (this does most of the work)...
SortBy[(...),-Last@#&]               Order by the multiplicity descending...
StringRiffle@(...)                   And create a string with the desired format.
LegionMammal978
sumber
Bagus. Saya suka bagaimana "Byte" mengembalikan data gambar.
DavidC
4

Bash + coreutils, 54

  • 7 byte disimpan berkat @manatwork
grep -oE '#\w+'|sort|uniq -c|sort -nr|awk '$0=$2" "$1'

Ini mengasumsikan input STDIN dari format .txt Imagemagick .

Ideone.


Jika format input di atas terlalu banyak, maka kita dapat menambahkan konversi Imagemagick dari format apa pun:

Bash + coreutils + Imagemagick, 71

convert $1 txt:-|grep -oE '#\w+'|sort|uniq -c|sort -nr|awk '$0=$2" "$1'

Di sini, nama file gambar input dilewatkan sebagai parameter baris perintah.

Trauma Digital
sumber
2
OFS default awk adalah spasi, Anda dapat berdagang `" "` untuk,
n0741337
1
Atau bahkan lebih pendek awkbagian: awk '$0=$2" "$1'.
manatwork
3

JavaScript (ES6), 359 355 byte

Disimpan 4 byte berkat @Neil

u=>{i=new Image;i.src=u;e=document.createElement`canvas`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}

Demo

f=u=>{i=new Image;i.crossOrigin='';i.src=u;e=document.createElement`canvas`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}
f('http://i.imgur.com/acPudA9.gif')
<input value="https://i.imgur.com/acPudA9.gif" onchange="console.log('-------');f(this.value)">

Kasus pengujian lain yang saya unggah ke imgur untuk mendukung CORS:

Data warna spesifik pada kedua ini tampaknya telah sedikit berubah saat mengunggah karena suatu alasan tetapi masih mencetak jumlah kejadian yang sama untuk kedua kasus uji tersebut.

Patrick Roberts
sumber
Saya pikir |memiliki prioritas lebih rendah daripada <<jadi jika Anda menggunakannya, +maka Anda tidak akan membutuhkan begitu banyak ().
Neil
@ user2428118 lain kali saya akan menghargai jika Anda meninggalkan kekhawatiran dalam komentar dan meminta saya untuk mengedit jawaban saya sendiri daripada mengeditnya sendiri. Anda benar-benar memecahkan demo saya dengan menghapus <!-- language: lang-js -->dari snippet, secara efektif menonaktifkan JavaScript.
Patrick Roberts
@ Patrick Maaf, saya akan lebih berhati-hati lain kali. Juga, saya baru saja menemukan cara untuk menghemat beberapa byte:u=>{document.write`<img src=${u} id=i><canvas id=e>`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}
user2428118
2

Pyth , 29 byte

jmj;_d_SrSm+\#.[\06.Hid256'Q8

Cobalah online!

(Juru bahasa online tidak dapat membaca gambar, jadi saya menanggalkan bagian itu dan memasukkan hasil membaca gambar itu, yang merupakan daftar kembar tiga warna. Bagian yang bertanggung jawab untuk membaca gambar adalah ' , satu titik tunggal.)

Bukti fungsionalitas 'satu titik tunggal

Biarawati Bocor
sumber
Anda perlu ssebelumnya 'Q, karena gambar direpresentasikan sebagai daftar daftar kembar tiga.
Jakube
Inilah solusi yang benar (dan lebih pendek)V_SrS%L+\#*3"%02X"s'z8jd_N
Jakube
2

Mathematica 103 92 byte

{"#"<>IntegerString[255Round[List@@#],16,2],#2}&@@@DominantColors[#,9999,{"Color","Count"}]&

Contoh

foto


Penjelasan

DominantColorsbiasanya mengembalikan daftar warna dan jumlah yang mewakili kelompok utama dalam gambar. Ketika jumlah warna yang diminta melebihi jumlah warna dalam gambar, warna piksel yang tepat dikembalikan. (Saya berasumsi bahwa kurang dari 10.000 warna akan ada di gambar input.)

gambar


{"#"<>IntegerString[255Round[List@@#],16,2],#2} mengubah nilai warna dasar 10 dengan nilai heksadesimal.


Catatan: hanya ada 5 warna pada gambar mandrill. (Saya dulu ColorQuantize[<image>,5]mengurangi jumlah warna dalam gambar mandrill standar.)

DavidC
sumber
Baru saja
bermain golf
Sedikit saja. Tetapi pendekatan Anda membutuhkan jumlah warna yang tidak terbatas.
DavidC
1

PowerShell v2 +, 187 byte

$a=New-Object System.Drawing.Bitmap $args[0]
$b=@{}
0..($a.Height-1)|%{$h=$_;0..($a.Width-1)|%{$b["#"+-join($a.GetPixel($_,$h).Name[2..7])]++}}
$b.GetEnumerator()|Sort value -des|FT -h -a

Menggunakan kembali hampir semua kode dari jawaban saya di Dapatkan warna yang paling dominan . Jadi, mohon referensi untuk penjelasan lengkap.

Perubahan di sini adalah dalam pengindeksan $bdi baris ketiga untuk mencocokkan persyaratan format output eksplisit, dan di baris terakhir kita sortdengan valuedalam -desurutan cending, kemudian pipa Format-Tabledengan -HideTableHeaders dan -AutoSize sebagai parameter. Sangat jarang digunakanFT sini di PPCG, karena output tersirat pada akhir eksekusi, tetapi di sini sangat berguna untuk memastikan kami mendapatkan hanya output bagian yang benar.

Contohnya

Yang pertama adalah gambar uji "merah" dari tantangan Warna dominan, yang kedua adalah "kesaksian" dari tantangan ini.

PS C:\Tools\Scripts\golfing> .\color-count.ps1 C:\Tools\Scripts\golfing\img\red.png

#ff0000 139876
#dcd9cf 3056  
#f2f1ed 1512  
#ffffff 1508  
#ffe6e6 1488  
#ffe3e3 8     
#eae8e2 4     
#fffbfb 4     


PS C:\Tools\Scripts\golfing> .\color-count.ps1 C:\Tools\Scripts\golfing\img\z07VA.gif

#ffffff 18042
#000000 1754 
#ff3300 204  
AdmBorkBork
sumber
1

Tcl / Tk , 134 byte

console s
lmap s [concat {*}[[image c photo -fi $argv] d]] {dict inc D $s}
dict fo k\ v [lsort -int -s 2 -inde 1 -de $D] {puts $k\ $v}

dadalah untuk data.

Tcl / Tk , 232 byte

console s
set I [image c photo -fi $argv]
set i 0
time {set j 0
time {dict inc D #[join [lmap s [$I g $i $j] {format %02X $s}] ""]
incr j} [image h $I]
incr i} [image w $I]
dict fo k\ v [lsort -int -s 2 -inde 1 -de $D] {puts $k\ $v}

wish sort_pix.tcl QTE4O.png

masukkan deskripsi gambar di sini


wish sort_pix.tcl 5s1Ob.png

masukkan deskripsi gambar di sini


wish sort_pix.tcl z07VA.gif

masukkan deskripsi gambar di sini

sergiol
sumber
1

Brain-Flak , 1110 byte

{{}({}[(()()()()()){}])}{}(<>)<>([]){{}({}()<({}()<({}()<>)>)>)<>([])}{}<>{({}<({}<({}<(()()<>)>)>)>)<>{(<>)<>(()()()){({}[()]<<>({}<([([(({})<>[({})]<>)])]<>)<>{({}()<([{}])<>({}<>)<>>)<>}{}<>{}<>>{})({}<({}<({}<>)<>({}<>)<>({}<>)<>>)<>({}<>)<>({}<>)<>({}<>)>)<>({}<({}<>)<>({}<>)<>>)<>({}<>)<>({}<>)>)}{}<>((){[()](<{}>)}{})((){[()](<{}({}())<>{}{}{}>)}{}){{}(<<>(()()()){({}[()]<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}{}>)}{}<>({}<({}<>)<>({}<>)<>({}<>)<>>)<>({}<>)<>({}<>)<>({}<>)<>}({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}(()()()()){((({}[()])<{({}[()]<({}<({}<>)<>>)>)}{}>)<{({}[()]<<>({}<>)>)}{}>)}{}<>}{}<>(()()()())([][()])({}(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>){({}[()]<(<(()()()())([][()])({}(<>))><>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>)<{({}[()]<([([({}<({}<({}<({}<(({})<>)<>>)>)>)>)<><({}<>)>]{}<(())>)](<>)){({}())<>}{}({}<><{}{}>){{}<>(<({}<({}<({}<({}<({}<({}<({}<({}<>)>)>)>)<>>)>)>)>)<>({}<({}<({}<({}<<>>)>)>)>)>)}{}({}<({}<({}<({}<>)>)>)>)<>>)}{}<>{}{}{}{}>[()]){({}[()]<({}<({}<({}<({}<>)>)>)>)<>>)}{}<>>)}{}{({}[()]<>)<>}<>

Cobalah online!

Ya itu petualangan. Ternyata, Brain-Flak tidak pandai memproses gambar. Siapa yang tahu?

Saya akan memulai dengan mencatat bahwa ini secara teknis tidak memenuhi format output ketat yang diminta. Jika Anda ingin itu diberlakukan, beri tahu saya dan saya akan mencoba menambahkan kode terjemahan. Untuk saat ini menampilkan angka desimal: masing-masing 4 angka mewakili warna dalam urutan RED GREEN BLUE COUNT.

Selanjutnya, masukan. Format input yang diizinkan lebih fleksibel sehingga saya menggunakan format yang paling mudah untuk Brain-Flak untuk menguraikan (yang dapat saya temukan): Netpbm P6. Sayangnya, Brain-Flak tidak dapat mengurai angka desimal dari format P3 karena semua gambar Netpbm dimulai dengan karakter Pdan Brain-Flak tidak dapat menangani input desimal dari file yang mengandung karakter non-angka. Jadi P6 digunakan sebagai gantinya, karena P6 menyimpan informasi warna sebagai byte, yang diperlakukan sebagai angka dalam mode input ASCII. Masih ada tantangan karena informasi tajuk tidak disandikan bermanfaat, tapi untungnya saya tidak memerlukan informasi itu sehingga hanya dibuang. Program ini tidak sepenuhnya mematuhi standar Netpbm karena tidak mengizinkan baris baru dalam header, tetapi baris baru tidakdiperlukan oleh standar sehingga input adalah file Netpbm yang valid.

Peringatan terakhir, versi pada TIO sebenarnya tidak dikonfigurasikan dengan benar untuk operasi "resmi" karena (setahu saya) saya tidak dapat menyediakan file sebagai input pada TIO, saya juga tidak bisa menyediakan byte yang sesuai dengan ASCII yang tidak dapat dicetak dalam input langsung. Untuk operasi resmi, -abendera diperlukan untuk mengambil input sebagai byte mentah dan -funtuk mengambil input dari file. Input sampel pada tautan TIO bukannya diterjemahkan secara manual dari contoh di halaman wiki Netpbm .

Selain itu, saya ingin mengucapkan terima kasih kepada wiki Brain-Flak untuk memberikan potongan kode yang bermanfaat untuk bekerja. Secara khusus, implementasi Bubble-Sort di sini sangat penting untuk langkah terakhir begitu saya mendapatkan hitungan untuk setiap warna, karena saya tidak benar-benar tahu harus mulai dari mana. Butuh modifikasi berat, tetapi saya senang saya tidak harus memulai dari awal.

Ini adalah versi kode yang tidak diklik dan dikomentari. Brain-Flak agak terlalu bertele-tele untuk memasukkan penjelasan yang diformat dengan benar di pos ini, tetapi versi yang tidak diklik di TIO berisi semua yang akan saya sertakan dalam satu dengan format yang lebih baik daripada yang bisa saya kelola di sini, jadi jika Anda tertarik silakan ambil Lihat.

Mungkin ada golf yang belum dilakukan, jawaban Brain-Flak saya sebelumnya telah melalui banyak revisi, tetapi semoga pelajaran yang didapat di sana memberikan titik awal yang lebih baik.

Kamil Drakari
sumber
0

Python 2, 186 byte

import Image
I=Image.open(input()).convert('RGB')
w,h=I.size
r=['#'+('%0.2X'*3)%I.getpixel((i%w,i/h))for i in range(w*h)]
for a,b in sorted(set((r.count(v),v)for v in r))[::-1]:print b,a

Cobalah online!

Penafian: Output yang disajikan adalah one-liners untuk keterbacaan. Keluaran kode dihasilkan dengan pemisahan ruang dan garis sesuai permintaan tantangan.

Output untuk 10red 20 biru 30 hitam 40 putih:

[('#FFFFFF', 40), ('#000000', 30), ('#0000FF', 20), ('#FF0000', 10)]

Ouput untuk gradien biru:

[('#718DFF', 19), ('#5571FF', 15), ('#8DAAFF', 11), ('#3855FF', 11), ('#AAAAFF', 7), ('#1C38FF', 7), ('#AAC6FF', 6), ('#8D8DFF', 6), ('#C6C6FF', 5), ('#C6E2FF', 4), ('#FFFFFF', 3), ('#E2E2FF', 3), ('#001CFF', 3)]

Output untuk gambar uji

[('#FFFFFF', 18042), ('#000000', 1754), ('#FF3300', 204)]

Penjelasan:

w,h=I.size # field size stores tuple of values of width and height of image

I.getpixel((i%w,i/h)) # returns tuple of base10 RGB values

('%0.2X'*3) # format string to convert int into hex

set((r.count(v),v)for v in r) # generate set of unique pairs count-color 

sorted(set(...))[::-1] # apply sorted(), as it sorts set of tuples by firts elements and reverse sort

print b,a  # swap values in tuples and print
Possum Mati
sumber
0

Java (1.4+) , 483 428 bytes

import java.util.*;class I {public static void main(String[] a) throws Exception {java.awt.image.BufferedImage i = javax.imageio.ImageIO.read(new java.io.File(a[0]));Map m=new HashMap();String s;for(Integer x=0,y=0,c;y<i.getHeight();y++)for(x=0;x<i.getWidth();m.put(s=x.toHexString(((c=i.getRGB(x++,y))&0xff0000)>>16)+x.toHexString((c & 0xff00)>>8)+x.toHexString(c&0xff),m.get(s)==null?1:(int)m.get(s)+1));System.out.print(m);}}

Cobalah online! (Tidak bekerja online)


Tidak Disatukan:

import java.util.*;

class I {
    public static void main(String[] a) throws Exception {
        java.awt.image.BufferedImage i = javax.imageio.ImageIO
                .read(new java.io.File(a[0]));
        Map m = new HashMap();
        String s;
        for (Integer x = 0, y = 0, c; y < i.getHeight(); y++)
            for (x = 0; x < i.getWidth(); m
                    .put(s = x.toHexString(((c = i.getRGB(x++, y)) & 0xff0000) >> 16)
                            + x.toHexString((c & 0xff00) >> 8)
                            + x.toHexString(c & 0xff), m.get(s) == null ? 1
                            : (int) m.get(s) + 1))
                ;
        System.out.print(m);
    }
}

The toString()peta output seperti ini:

{7c7c7c=6, 1d57a5=20468, 121212=7, d3d3d3=3, bdbdbd=9, 949494=2, 333=14, 626262=3, cacaca=2, 141414=5, fff=11, c9c9c9=1, e8e8e8=1, 919191=4, 161616=5, c2c2c2=1, 646464=7, 979797=12, fafafa=2, 808080=1, 7b7b7b=1, 484848=4, b9b9b9=2, f1f1f1=2, 6b6b6b=6, 363636=15, 262626=4, d8d8d8=2, 868686=4, 757575=1, 575757=3, a7a7a7=2, cecece=2, dcdcdc=2, c3c3c3=2, 1d1d1d=5, 727272=9, 656565=2, 3a3a3a=3, 7d7d7d=10, 393939=5, 797979=3, 222=31, 8f8f8f=2, 454545=4, 181818=9, 2e2e2e=2, 222222=1, 1c1c1c=19, b8b8b8=2, e1e1e1=5, 232323=5, 8a8a8a=3, 959595=7, 6a6a6a=9, 434343=7, 5c5c5c=3, 111=20, 909090=3, 424242=4, 212121=1, 1a1a1a=6, 202020=7, efefef=1, 565656=5, 6e6e6e=7, 767676=3, 323232=2, eee=5, 444=18, 2c62ab=1, 717171=2, b1b1b1=3, 6c6c6c=3, 545454=7, 515151=17, 2f2f2f=2, 4a4a4a=3, 888888=6, 6d6d6d=3, 898989=3, a3a3a3=5, 7e7e7e=9, ddd=9, b6b6b6=3, 2b2b2b=5, 313131=5, 8d8d8d=1, a2a2a2=2, 696969=3, a5a5a5=3, 4f4f4f=5, 828282=7, 191919=5, 606060=4, 6f6f6f=4, 8b8b8b=3, ebebeb=2, 555=19, 929292=3, 131313=11, 999999=5, d2d2d2=2, 444444=9, 474747=4, dddddd=1, 585858=8, 5a5a5a=3, 000=9887, afafaf=2, dfdfdf=3, 747474=3, 666666=4, a1a1a1=4, 2a2a2a=11, 4d4d4d=6, 818181=2, 878787=5, 215aa6=1, d9d9d9=4, b5b5b5=3, b4b4b4=3, 737373=4, aeaeae=3, bbb=15, 242424=4, 2d2d2d=8, 888=19, c1c1c1=1, 494949=9, dbdbdb=5, ccc=19, 5d5d5d=3, 5f5f5f=1, 414141=6, c8c8c8=3, aaa=16, 1e1e1e=3, 707070=2, 9e9e9e=2, 373737=7, 9d9d9d=2, 1b1b1b=4, 303030=7, 535353=10, 595959=2, 8e8e8e=3, 383838=5, 939393=18, 616161=2, 686868=6, dadada=1, e3e3e3=2, 5b5b5b=3, a4a4a4=5, 8c8c8c=5, a6a6a6=11, 292929=6, 4c4c4c=3, 151515=6, fefefe=2, 787878=2, 505050=2, e2e2e2=1, 1f1f1f=9, adadad=2, ababab=1, 5e5e5e=6, 252525=4, 4e4e4e=3, 282828=7, a8a8a8=4, 9c9c9c=3, aaaaaa=1, 101010=5, b7b7b7=2, 969696=6, 7f7f7f=4, 555555=2, a9a9a9=5, 343434=8, 999=17, 777777=3, ffffff=76669, f0f0f0=4, bbbbbb=1, 1e58a5=1, b3b3b3=4, 777=20, 636363=2, d4d4d4=1, 2c2c2c=5, 848484=1, 3c3c3c=3, bfbfbf=2, 3e3e3e=9, 333333=4, 7a7a7a=3, 858585=4, 4b4b4b=3, 272727=7, 111111=6, 666=13, 9b9b9b=1, bcbcbc=4, cfcfcf=2, 9a9a9a=1, 404040=21, 525252=3, 989898=4, 171717=5, 3b3b3b=2, c4c4c4=1, 3f3f3f=7, 464646=1, cdcdcd=2, b2b2b2=33, c5c5c5=2, bababa=2}

Tolong jangan memposting 1,8 saran golf tertentu, kecuali itu berfungsi di Jawa yang lebih lama, saya tidak mau.

Contoh: Lambdas tidak berfungsi di lebih banyak versi Jawa daripada yang berfungsi.

Guci Gurita Ajaib
sumber
" Tolong jangan memposting 1,8 saran golf tertentu, kecuali itu berfungsi di Jawa yang lebih tua, saya tidak mau. " Karena penasaran: mengapa Java 4 sementara Java 10 sudah tersedia?
Kevin Cruijssen
Beberapa golf yang bisa digunakan di Java 4 (saya pikir): import java.util.*;class M{public static void main(String[]a)throws Exception{java.awt.image.BufferedImage i=javax.imageio.ImageIO.read(new java.io.File(a[0]));Map m=new HashMap();String s;for(Integer x=0,y=0,c;y<i.getHeight();y++)for(x=0;x<i.getWidth();m.put(s=x.toHexString((c&0xff0000)>>16)+x.toHexString((c&0xff00)>>8)+x.toHexString(c&0xff),m.get(s)==null?1:(int)m.get(s)+1))c=i.getRGB(x++,y);System.out.print(m);}}( 419 bytes )
Kevin Cruijssen
@KevinCruijssen Karena 1,8, bisa dibilang, rilis terbesar dalam hal kode yang tidak akan berjalan dengan versi sebelumnya. Sebagian besar rilis lainnya adalah perbaikan dan penambahan kelas pada JRE. 1.8 adalah yang paling tidak kompatibel dengan JRE sebelumnya.
Magic Octopus Urn
@KevinCruijssen x.toHexIntegerlebih pintar daripada impor statis.
Magic Octopus Urn
Juga bukan Java 3, karena Java 3 ... benar-benar ... memiliki beberapa pintasan ...
Magic Gurita Guci
0

SmileBASIC, 165 byte

DEF C A
L=LEN(A)DIM C[L],N[L]FOR J=0TO L-1FOR I=0TO U-1ON A[J]-C[I]GOTO@L
NEXT
U=U+1@L
C[I]=A[J]INC N[I]NEXT
RSORT.,U,N,C
FOR I=0TO U-1?"#";HEX$(C[I],6),N[I]NEXT
END

Gambar diberikan sebagai array nilai warna ARGB 32 bit (nilai alfa dipangkas ketika nomor tersebut dikonversi ke string hex 6 digit)

12Me21
sumber