Ini membuat saya penasaran untuk beberapa waktu.
Adakah yang tahu algoritma yang digunakan Windows 7 Aero untuk menentukan warna yang akan digunakan sebagai sorotan lacak pelacakan panas pada tombol bilah tugas untuk aplikasi yang sedang berjalan?
Ini pasti didasarkan pada ikon aplikasi, tapi saya tidak bisa melihat pola spesifik dari mana ia mendapatkan nilai warna.
Tampaknya bukan salah satu dari yang berikut:
- Nilai warna rata-rata dari seluruh ikon, jika tidak Anda akan menjadi cokelat
sepanjang waktudengan ikon multi-warna seperti Chrome. - Warna yang paling banyak digunakan dalam gambar, jika tidak Anda akan mendapatkan kuning untuk ikon SQL Server Management Studio (ke-6 dari kiri). Juga, ikon Chrome menggunakan warna merah, hijau dan kuning dengan ukuran yang sama.
- Warna yang terletak pada koordinat piksel tertentu dalam ikon, karena Chrome berwarna merah - menunjukkan bagian atas ikon - dan Notepad ++ (ke-2 dari kanan) berwarna hijau - menunjukkan bagian bawah ikon.
Saya mengajukan pertanyaan ini di ux.stackoverflow.com dan ditutup sebagai di luar topik, tetapi seseorang menjawab dengan yang berikut:
Seperti yang dijelaskan oleh Raymond Chen dalam artikel blog MSDN ini :
Beberapa orang bertanya bagaimana hal itu dilakukan. Benar-benar tidak ada yang istimewa. Kode hanya mencari warna dominan di ikon. (Dan, karena desainer visual adalah penempel untuk hal semacam ini, hitam, putih, dan nuansa abu-abu tidak dianggap sebagai "warna" untuk tujuan perhitungan ini.)
Namun saya tidak benar-benar puas dengan jawaban itu karena tidak menjelaskan bagaimana warna "dominan" dihitung. Tentunya pada ikon SQL Management Studio, warna dominan, paling tidak bagi saya, adalah kuning. Namun sorotnya hijau. Saya ingin tahu, secara spesifik, apa algoritma itu.
An average colour value from the entire icon, otherwise you would get brown all the time.
Itu tidak masuk akal. Sebagai contoh, bagaimana rata-rata ikon Skype , command-prompt , atau μTorrent menjadi cokelat? ಠ_ ఠ (Terakhir kali saya melakukan rekayasa balik terhadap salah satu dari algoritma perhitungan warna Windows, butuh beberapa tahun perhatian masuk dan keluar dan banyak jenis pekerjaan yang berbeda untuk akhirnya mengetahuinya. Sepertinya saya mungkin akhirnya meretas ini satu di beberapa titik.)Jawaban:
Dari Selamat Datang di Desktop Windows 7 tepat pada 35 menit dalam:
Saya cukup yakin pembicara dimaksudkan untuk mengatakan "RGB", karena "RGBV" tampaknya tidak menjadi apa-apa. Bagian "dinormalisasi" tidak terlalu penting; itu secara efektif menghitung berapa banyak piksel yang jatuh ke dalam setiap "ember." Setiap piksel, oleh karena itu, dimasukkan ke dalam salah satu dari 27 ember (disusun dalam susunan tiga dimensi; akar pangkat 27 adalah 3) berdasarkan posisi masing-masing nilai salurannya. Windows menentukan untuk setiap saluran warna apakah intensitas warna itu ada di bagian bawah, tengah, atau atas dari rentang tersebut. Tampaknya kisarannya sekitar 0-60, 60-200, dan 200-255. Pixel yang benar-benar transparan tidak termasuk sama sekali.
Windows kemudian menemukan ember mana yang memiliki piksel paling banyak, mengabaikan yang hitam, putih, dan abu-abu (ember di mana ketiga saluran berada di sepertiga rentang yang sama). Itu menjelaskan ikon SQL Server Management Studio - banyak dari apa yang tampak kuning bagi kita benar-benar dibuang di ember "putih" dan diabaikan.
Jika tidak ada piksel di salah satu kotak yang dapat diterima, program akan mendapatkan hamparan biru muda terlepas dari skema warna sistem. (Lihat prompt perintah.) Jika suatu program tidak memiliki ikon, ia mendapat overlay putih / transparan meskipun ikon default Windows akan menghasilkan overlay biru atau hijau.
Tidak ada yang menghentikan banyak program untuk memiliki warna highlight yang sama. Ikon Chrome terbaru, misalnya, mendapat warna kuning sama dengan Windows 8's Explorer.
Jika ada ikatan, ada urutan yang telah ditentukan yang tidak tergantung pada urutan warna pada gambar. Ini mungkin hanya hasil dari cara maksimum ditemukan - ember yang diperiksa sebelumnya akan terus menjadi maks bahkan jika nanti satu ikatan. Tampaknya kuning adalah salah satu kotak pertama yang diperiksa.
Setelah ember yang menang ditemukan, warna sorotan tampaknya diatur ke warna di suatu tempat di tengah kisaran ember.
Kasus uji (angka yang disediakan adalah nilai RGB):
(255, 247, 209) → sorotan default
(47, 0, 0) → sorot default
(60, 0, 0) → merah tua
(66, 0, 0) → merah tua
(165, 0, 0) → merah
( 128, 128, 128) → sorotan default
(0, 148, 255) dan (255, 0, 0) → merah
(0, 255, 0) dan (255, 216, 0) dengan area yang sama → kuning
sama tetapi terbalik → kuning
(255, 180, 180) → merah terang
(255, 210, 210) → sorotan default
murni biru, kuning murni, merah murni, dan hijau murni dengan area yang sama → kuning
(255, 61, 61) → merah
(82, 0, 0) → merah tua
sumber
Dugaan saya adalah bahwa untuk setiap warna, mulai dari atas, Anda mendapatkan nilai R, G, dan B, dan dari mereka Anda mengambil yang tertinggi dan terendah dari ketiganya dan membandingkannya. Warna dengan celah terbesar antara tertinggi dan terendah akan menjadi warna paling terang dalam gambar. Sekarang dalam kasus, katakanlah, ikon Chrome, mungkin ada beberapa warna terikat untuk kesenjangan terbesar, tetapi merah di atas, jadi itu ditemui pertama, dan dengan demikian itulah yang mendominasi untuk gambar itu. (Saya kira Anda bisa menguji ini dengan mendesain ikon Anda sendiri, seperti memutar logo Chrome 120 derajat dan melihat apakah hijau atau kuning yang mendominasi.)
sumber
Dari cara saya memahaminya - OS memperhitungkan lebih dari beberapa faktor ketika menentukan warna.
Ini mungkin salah, dan sebagian besar spekulasi, tetapi, ini memberi Anda metode yang mudah dimengerti OS bisa sangat baik digunakan untuk menentukan warna. Ini juga menjelaskan bagaimana program tanpa warna yang telah ditentukan, dan ikon menggunakan jumlah warna yang sama, tidak ditugaskan putih / coklat / hitam, dan mengapa hitam, putih dan abu-abu tidak pernah ditugaskan. Anda juga harus mencatat, bahwa program yang tidak memiliki Ikon (masih ada beberapa) menunjukkan warna pelacakan panas transparan, yang hanya menyebabkan ikon menjadi 'lebih cerah' ketika melayang.
sumber
Berikut adalah beberapa kode VB yang rata-rata warna RGB dari suatu gambar:
Ini tidak benar-benar dioptimalkan untuk digunakan dalam OS, tetapi seharusnya memberi Anda ide dasar - Sumber
sumber