Kisah tentang ikon lama. Teka-teki 18 warna. Warna transparan dan terbalik

Beberapa orang sekarang tidak peduli dengan satu atau dua kilobytes tambahan. Tetapi ada orang-orang seperti itu, dan catatan ini ditulis hanya untuk orang yang sangat aneh . )

Dalam kasus-kasus terisolasi ketika saya perlu merekam ikon ekspresif (.ico) dari aplikasi dan pada saat yang sama harus menyimpan byte, saya menggunakan hack berikut: Saya merekam gambar dalam mode 16-warna - tapi! - tidak dalam palet tetap yang biasa, tetapi dalam yang adaptif.

Apa yang diberikannya? Ikon 48x48, transparansi 1-bit, 256 warna = 3774 byte, juga dalam 16 warna = 1662 byte. Keuntungannya adalah 2 kilobyte, dengan sedikit penurunan kualitas gambar.



Sebuah contoh Dari kiri ke kanan:

  • 256 warna asli
  • palet 16-warna standar tetap (dan di sini saya mengambil palka selama beberapa menit sehingga gambar memiliki setidaknya beberapa penampilan yang layak)
  • palet 16-warna adaptif + menetas (dithering).

Bagaimana cara kerjanya? Anehnya, ikon 16 warna selalu membawa palet. Yaitu, 99,9% ikon lama membawa tabel warna 64-byte yang persis sama (4 byte per warna). Dan, ya - ternyata itu bisa diprogram ulang.

Sayangnya, saya tidak terbiasa dengan program ini, yang sepenuhnya dapat bekerja dengan ikon-ikon tersebut. Oleh karena itu, inilah resep untuk cara membuat "ikon" inferior: ambil IrfanView, unggah gambar ke dalamnya: baik warna 16 yang sudah disiapkan sebelumnya, atau kurangi jumlah warna di dalamnya: menu - gambar - kurangi kedalaman warna ... - 16 warna. Sekarang: menu - save as ... - pilih format .ico. Hanya itu semua Tidak, tidak semua: Irfan View tidak tahu cara bekerja dengan transparansi, tetapi harus dipulihkan secara manual di program lain. Microangelo Studio dapat memuat dan mengedit ikon tersebut (sayangnya, itu tidak memungkinkan membuat perpustakaan seperti itu dari awal, sama seperti membuat ikon tersebut dari awal). Kami memuat ikon ke Microangelo dan ... mungkin kami akan segera menerima jendela peringatan tentang "palet yang salah" - apa artinya ini dalam praktiknya akan dijelaskan nanti. Dengan menggunakan alat "isi" dan "pensil", kami menandai zona transparan; tuliskan; selesai!

Itulah yang saya lakukan sebelumnya, sekitar sepuluh tahun yang lalu. Sekarang, setelah dengan hati-hati melihat palet Microangelo, saya punya pertanyaan. Apa palet aneh ini, 18 warna? Bagaimana Anda bisa menyimpan 18 warna dalam file? Jumlahnya tidak bulat, tuan-tuan, programmer tidak melakukan ini; tidak nyaman bagi mereka. )) Dapat dilihat bahwa dalam palet ada 16 warna solid dan dua warna layanan: "transparan" dan "terbalik". "Invers" seperti apa? - jika warna seperti itu terjadi, itu menampilkan negatif dari apa yang ada di bawahnya; ini paling sering digunakan dalam kursor; dan kursor, pada intinya dan dalam struktur file, juga merupakan ikon. Tapi bagaimana semua warna ini disimpan? Jika titik gambar biasa dikemas dalam 4 bit (16 warna), maka transparansi hanya dapat disimpan sebagai bitmask terpisah (1 bit untuk setiap titik gambar). Oke, di mana inversi disimpan? Topeng lain, atau apa? Tidak ekonomis, tapi mungkin ... Mari kita hitung.

Ikon 48x48, 16 warna, 1 gambar. Ukuran file adalah 1662 byte. Apa isinya? Aku samar-samar membayangkan seluk-beluknya, tetapi mencoba untuk mengetahuinya. Bagian utama, gambar itu sendiri: 48 * 48/2 = 1152 byte. Palet: 16 * 4 = 64 byte. Topeng transparansi adalah 48 * 48/8 = 288 byte. Header .ico, secara resmi = 6 byte. Deskripsi frame (1 pc.) Dari dokumentasi = 16 byte. Total: 1152 + 64 + 288 + 6 + 16 = 1526. Mungkin ada sesuatu yang lain, karena ukuran file sebenarnya lebih besar - tetapi itu tidak masalah; Hal lain yang penting, sisa dari "inkonsistensi" kecil: 136 byte, dan itu jelas tidak memungkinkan menempatkan bit mask lain berukuran 288 byte. Jadi ... warna terbalik entah bagaimana tertanam dalam gambar itu sendiri. Mungkin sekarang Anda bisa menebak sendiri bagaimana mereka melakukannya?

Dan mereka melakukannya, rupanya, seperti ini: di Windows asli (tampaknya, dimulai dengan Win 95OSR2 sepenuhnya, dan di Win XP dan yang lebih baru sudah sebagian), dalam ikon dan kursor, secara tegas - tidak ada warna transparan yang nyata. Jika topeng alpha menunjukkan: titik kursor / ikon saat ini adalah "transparan" - warna di bawah kursor / ikon diambil dan XORed ("eksklusif" atau ""; mungkin hanya ada pengurangan) - perhatian! - dengan warna titik saat ini diambil dari palet ikon.

Apa itu Jika itu adalah warna pertama (hitam dalam palet tetap), XOR tidak melakukan “apa-apa” dengan latar belakang - warnanya menjadi transparan. Jika itu adalah warna terakhir (dalam palet tetap - putih) - warnanya berubah sepenuhnya, berubah menjadi negatif. Ini adalah seluruh rahasia bagaimana "18 warna" disimpan ... Yaitu, sekali lagi: "transparan" = hitam (+) topeng alpha, "terbalik" = putih (+) topeng alpha. Dan sekarang - mari kita bicara tentang gangguan.

Peringatan yang disebutkan di atas oleh Microangelo menyatakan: "Anda tidak memiliki warna putih dan hitam penuh di palet, bekerja dengan transparansi akan salah!" Memang, palet adaptif kami dapat melakukannya tanpa hitam atau putih. Lalu bagaimana transparansi akan berjalan? Oh, persis seperti yang kita harapkan: itu akan mengambil beberapa warna dari palet (misalnya, hijau), "XOR" dengan latar belakang, dan kita akan mendapatkan warna ungu yang indah alih-alih transparansi. )) Atau contoh lain - hitam tidak sengaja jatuh ke tempat warna terakhir di palet: dan "inversi" berubah menjadi transparansi penuh yang biasa.



Contoh: di sebelah kiri adalah palet standar, di sebelah kanan diprogram ulang. Di sebelah kiri, transparansi (P) dan inversi (I) berjalan sebagaimana mestinya; di sebelah kanan - jelas tidak.

Namun, kita dapat mengamati semua pesona ikon ini hanya di Windows asli. Sistem operasi modern, seperti Win 10, mengabaikan warna palet, dan bit mask "transparansi" selalu berfungsi seperti transparansi dalam bentuknya yang paling murni: tidak ada XOR, dan juga tidak ada inversi. Namun, dalam mekanisme tampilan kursor, masih ada kompatibilitas - rangkaian ekonomis lama yang baik bekerja di sana; "Hangat, lampu", dan ... sedikit orang yang mengerti dan membutuhkan.



Contoh: tampilan berbeda dari ikon yang sama di Windows XP dan Windows 7.

Source: https://habr.com/ru/post/id422495/


All Articles