Format berkas ICO adalah format file gambar untuk ikon komputer di Microsoft Windows. File ICO berisi satu atau beberapa gambar kecil dengan berbagai ukuran dan kedalaman warna , sehingga dapat diskalakan dengan tepat. Di Windows, semua file yang dapat dijalankan yang menampilkan ikon ke pengguna, di desktop, di Start Menu, atau di Windows Explorer, harus membawa ikon dalam format ICO.

Format berkas CUR adalah format file gambar hampir identik untuk non-animasi kursor di Microsoft Windows. Satu-satunya perbedaan antara kedua format file ini adalah byte yang digunakan untuk mengidentifikasinya dan penambahan hotspot di header format CUR; hotspot didefinisikan sebagai offset piksel (dalam koordinat x, y) dari sudut kiri atas gambar kursor di mana pengguna sebenarnya mengarahkan mouse.

Sejarah
-------

Ikon yang diperkenalkan di Windows 1.0 berukuran 32 × 32 piksel dan monokrom. Dukungan untuk 16 warna diperkenalkan di Windows 3.0 .

Win32 memperkenalkan dukungan untuk menyimpan gambar ikon hingga 16,7 juta warna (TrueColor) dan hingga 256x256 piksel dalam dimensi. Windows 95 juga memperkenalkan mesin Device Independent Bitmap (DIB) baru. Namun, 256 warna adalah kedalaman warna ikon default di Windows 95. Dimungkinkan untuk mengaktifkan 65535 ikon warna (Highcolor) dengan memodifikasi nilai *BPP Ikon Shell* di registri atau dengan membeli Microsoft Plus ! untuk Windows 95. Nilai *Ukuran Ikon* Kerangka memungkinkan penggunaan ikon yang lebih besar sebagai pengganti ikon 32 × 32 dan *Ukuran Ikon* Kerangka *Kecil*nilai memungkinkan menggunakan ukuran khusus sebagai pengganti ikon 16 × 16. Dengan demikian, satu file ikon dapat menyimpan gambar dengan ukuran berapa pun dari 1 × 1 piksel hingga 256 × 256 piksel (termasuk ukuran non-persegi) dengan 2 (jarang digunakan), 16, 256, 65535, atau 16,7 juta warna ; tetapi shell tidak dapat menampilkan ikon berukuran sangat besar. Area pemberitahuan bilah tugas Windows dibatasi hingga 16 ikon warna secara default hingga Windows Me saat diperbarui untuk mendukung ikon warna tinggi.

Windows XP menambahkan dukungan untuk gambar ikon warna 32-bit (16,7 juta warna ditambah transparansi saluran alfa), sehingga memungkinkan area semitransparan seperti bayangan , anti-aliasing , dan efek seperti kaca untuk digambar dalam sebuah ikon. Windows XP, secara default, menggunakan ikon 48 × 48 piksel di Windows Explorer. Windows XP dapat dipaksa untuk menggunakan ikon sebesar 256 × 256 dengan memodifikasi nilai *ukuran ikon Shell* tetapi ini akan menyebabkan semua ikon 32 × 32 di seluruh shell akan ditingkatkan. Microsoft hanya merekomendasikan ukuran ikon hingga 48 × 48 piksel untuk Windows XP. Windows XP dapat memperkecil ukuran 256 × 256 dan ikon yang lebih besar jika tidak tersedia ukuran gambar yang lebih dekat. 

Windows Vista menambahkan tampilan ikon 256 × 256-piksel ke Windows Explorer, serta dukungan untuk format PNG yang dikompresi. Meskipun kompresi tidak diperlukan, Microsoft menganjurkan agar semua 256 × 256 ikon dalam file ICO harus disimpan dalam format PNG untuk mengurangi ukuran file secara keseluruhan. Windows Vista Explorer mendukung ikon skala halus ke ukuran non-standar yang ditampilkan dengan cepat bahkan jika gambar tidak ada untuk ukuran itu di file ikon. Shell Windows Vista menambahkan penggeser untuk "memperbesar" ukuran ikon masuk dan keluar. Dengan pengguna yang menggunakan resolusi lebih tinggi dan mode DPI tinggi, format ikon yang lebih besar (seperti 256 × 256) direkomendasikan.

Jenis MIME
----------

Sementara tipe MIME yang terdaftar IANA untuk file ICO adalah `image/vnd.microsoft.icon`, MIME itu dikirimkan ke IANA pada tahun 2003 oleh pihak ketiga dan tidak dikenali oleh perangkat lunak Microsoft, yang menggunakan `image/x-icon` sebagai gantinya. Jenis `image/ico`, `image/icon`, `text/ico` dan `application/ico` juga telah terlihat digunakan.

Struktur sumber daya ikon
-------------------------

File ICO atau CUR terdiri dari struktur ICONDIR ("Direktori ikon"), yang berisi struktur ICONDIRENTRY untuk setiap gambar dalam file, diikuti oleh blok yang berdekatan dari semua data bitmap gambar (yang mungkin dalam format Windows BMP , tidak termasuk struktur BITMAPFILEHEADER, atau dalam format PNG , disimpan secara keseluruhan). 

Gambar dengan kedalaman warna kurang dari 32 bit mengikuti format tertentu: gambar dikodekan sebagai gambar tunggal yang terdiri dari topeng warna ("topeng XOR") bersama dengan topeng opasitas ("topeng DAN").  [ *verifikasi gagal* ]Topeng XOR harus mendahului topeng AND di dalam data bitmap; jika gambar disimpan dalam urutan bottom-up (yang kemungkinan besar adalah), topeng XOR akan digambar di bawah topeng AND. Masker AND adalah 1 bit per piksel, terlepas dari kedalaman warna yang ditentukan oleh header BMP, dan menentukan piksel mana yang sepenuhnya transparan dan mana yang sepenuhnya buram. Topeng XOR sesuai dengan kedalaman bit yang ditentukan di header BMP dan menentukan warna numerik atau nilai palet untuk setiap piksel. Bersama-sama, topeng AND dan topeng XOR membuat gambar tidak transparan yang mewakili gambar dengan transparansi 1-bit; mereka juga memungkinkan pembalikan latar belakang. Tinggi gambar dalam struktur ICONDIRENTRY file ICO / CUR sama dengan dimensi gambar yang diinginkan (setelah topeng digabungkan), sedangkan tinggi di header BMP sama dengan dua gambar topeng yang digabungkan (sebelum digabungkan). Oleh karena itu, masing-masing masker harus memiliki dimensi yang sama, dan tinggi yang ditentukan dalam header BMP harus tepat dua kali tinggi yang ditentukan dalam struktur ICONDIRENTRY.

Gambar 32-bit (termasuk gambar BMP format BITMAPINFOHEADER 32-bit  ) secara khusus adalah gambar 24-bit dengan tambahan saluran 8-bit untuk pengomposisian alfa. Oleh karena itu, pada gambar 32-bit, mask AND tidak diperlukan, tetapi disarankan untuk dipertimbangkan. Windows XP dan yang lebih tinggi akan menggunakan gambar 32-bit dalam mode kurang dari True color dengan membuat topeng AND berdasarkan saluran alfa (jika tidak ada gambar yang sudah ada) jika tidak ada versi 24-bit dari gambar yang disediakan di file ICO / CUR. Namun, versi Windows sebelumnya menafsirkan semua piksel dengan opasitas 100% kecuali masker AND disertakan dengan gambar. Menyediakan topeng AND khusus juga akan memungkinkan untuk mengubah dan memberi petunjuk oleh pembuat ikon. Meskipun masker AND tidak disediakan, jika gambar dalam format Windows BMP, header BMP harus tetap menentukan tinggi dua kali lipat.

### Garis besar

Semua nilai dalam file ICO / CUR direpresentasikan dalam urutan byte little-endian .

**Header**

Struktur ICONDIR| Mengimbangi# | Ukuran (dalam byte) | Tujuan |
| --- | --- | --- |
| 0 | 2 | Pendiam. Harus selalu 0. |
| 2 | 2 | Menentukan jenis gambar: 1 untuk ikon (. ICO) gambar, 2 untuk kursor (. CUR) gambar. Nilai lain tidak valid. |
| 4 | 2 | Menentukan jumlah gambar di file. |

**Struktur direktori gambar**

|  |  |
| --- | --- |
| **Gambar # 1** | Entri untuk gambar pertama |
| **Gambar # 2** | Entri untuk gambar kedua |
| **.** **.** **.** |  |
| **Gambar #n** | Entri untuk gambar terakhir |

Entri gambar

Struktur ICONDIRENTRY| Mengimbangi# | Ukuran (dalam byte) | Tujuan |
| --- | --- | --- |
| 0 | 1 | Menentukan lebar gambar dalam piksel. Bisa berupa angka antara 0 dan 255. Nilai 0 berarti lebar gambar adalah 256 piksel. |
| 1 | 1 | Menentukan tinggi gambar dalam piksel. Bisa berupa angka antara 0 dan 255. Nilai 0 berarti tinggi gambar 256 piksel. |
| 2 | 1 | Menentukan jumlah warna dalam palet warna. Harus 0 jika gambar tidak menggunakan palet warna. |
| 3 | 1 | Pendiam. Seharusnya 0. |
| 4 | 2 | **Dalam format ICO:** Menentukan bidang warna. Harus 0 atau 1. **Dalam format CUR:** Menentukan koordinat horizontal hotspot dalam jumlah piksel dari kiri. |
| 6 | 2 | **Dalam format ICO:** Menentukan bit per piksel. **Dalam format CUR:** Menentukan koordinat vertikal hotspot dalam jumlah piksel dari atas. |
| 8 | 4 | Menentukan ukuran data gambar dalam byte |
| 12 | 4 | Menentukan offset data BMP atau PNG dari awal file ICO / CUR |

**Data gambar yang direferensikan**

Semua data gambar yang direferensikan oleh entri dalam direktori gambar dilanjutkan langsung setelah direktori gambar. Ini adalah praktik umum untuk menyimpannya dalam urutan yang sama seperti yang ditentukan dalam direktori gambar.

Ingatlah bahwa jika sebuah gambar disimpan dalam format BMP, maka gambar tersebut harus mengecualikan struktur BITMAPFILEHEADER pembuka, sedangkan jika disimpan dalam format PNG, gambar tersebut harus disimpan secara keseluruhan.

Perhatikan bahwa tinggi gambar BMP harus dua kali tinggi yang dinyatakan dalam direktori gambar. Paruh kedua bitmap harus berupa masker AND untuk piksel layar yang ada, dengan piksel keluaran yang diberikan oleh rumus Gambar XOR Output = (Existing AND Mask). Setel topeng menjadi nol di mana-mana untuk penimpaan yang bersih.

### Format PNG

Kemampuan untuk membaca gambar PNG dari gambar format ICO dan CUR diperkenalkan di Windows Vista. Gambar PNG dapat disimpan dalam gambar dengan cara yang sama seperti yang dilakukan untuk gambar format BMP Windows standar, dengan pengecualian bahwa gambar PNG harus disimpan secara keseluruhan, dengan header file-nya.

Perpustakaan ikon
-----------------

**Perpustakaan ikon** adalah cara untuk mengemas ikon Windows. Ini biasanya merupakan file biner 16-bit New Executable atau 32-bit Portable Executable yang memiliki file biner. Ekstensi ICL dengan sumber daya ikon menjadi ikon yang dikemas. Windows Vista dan versi yang lebih baru tidak mendukung tampilan ikon dari file 16-bit ( New Executable ).

Lihat juga
----------

* Format Gambar Ikon Apple
* Format file BMP
* Ikon komputer
* Favicon
* Daftar perangkat lunak ikon

Catatan
-------

1. ↑  The classic BITMAPINFOHEADER bitmap format supports storing images with 32 bits per pixel. When saved as a standalone .BMP file, "the high byte in each [pixel] is not used". However, when this same data is stored inside a ICO or CUR file, Windows XP (the first Windows version to support ICO/CUR files with more than 1 bit of transparency) and above interpret this byte as an alpha value.
2. ↑  Although Microsoft's technical documentation states that this value must be zero, the icon encoder built into .NET (System.Drawing.Icon.Save) sets this value to 255. It appears that the operating system ignores this value altogether.
3. ↑  Setting the color planes to 0 or 1 is treated equivalently by the operating system, but if the color planes are set higher than 1, this value should be multiplied by the bits per pixel to determine the final color depth of the image. It is unknown if the various Windows operating system versions are resilient to different color plane values.
4. ↑  The bits per pixel might be set to zero, but can be inferred from the other data; specifically, if the bitmap is not PNG compressed, then the bits per pixel can be calculated based on the length of the bitmap data relative to the size of the image. If the bitmap is PNG compressed, the bits per pixel are stored within the PNG data. It is unknown if the various Windows operating system versions contain logic to infer the bit depth for all possibilities if this value is set to zero.

Referensi
---------

1. ↑  "MIME Sniffing Standard". WHATWG. 2014-01-17. Diarsipkan dari versi asli tanggal 2014-03-27. Diakses tanggal 2014-04-18.  Parameter `|url-status=` yang tidak diketahui akan diabaikan (bantuan)
2. ↑  Butcher, Simon (3 Sep 2003). "image/vnd.microsoft.icon". Diakses tanggal 3 Jan 2014.
3. ↑  Lawrence, Eric (11 Feb 2011). "IE9 RC Minor Changes List". *IEInternals*. MSDN Blogs. Diakses tanggal 20 Aug 2016.  See the second comment.
4. ↑  Chen, Raymond (May 2008). "Windows Confidential - 16-Bit Icons Are So Passé". *TechNet Magazine*. Diakses tanggal July 1, 2011.

Pranala luar
------------

* Aktifkan Ikon Warna Tinggi di Windows 95 dan yang lebih baru
* Tingkatkan GUI Java dengan Ikon Windows
* Panduan pengembangan ikon untuk ikon Windows Vista
* Ikon (Artikel Teknis Microsoft 1995)
* Evolusi format file ICO ( Bagian 1, Bagian 2, Bagian 3, Bagian 4 )