Saya ingin memahami persyaratan memori untuk file sumber daya gambar yang akan ditampilkan pada layar resolusi 240x400.
Layar memiliki spesifikasi sebagai berikut:
Ini mendukung kedalaman warna hingga 18 bit dan menggunakan driver layar ILI9327.
Dengan asumsi saya perlu menampilkan 50 ikon berbeda, masing-masing berukuran 10 mm X 10 mm, berapa ruang penyimpanan yang diperlukan?
Berikut perhitungan saya:
Piksel per mm = 400 / 61.2 = 6.536
Jumlah piksel dalam satu gambar = 65,36 x 65,36 = 4272 piksel
Setiap piksel akan membutuhkan 18 bit X 3 (untuk R, G dan B) = 54 bit
Total bit yang dibutuhkan = 4272 x 54 = 230688 bit = 28,16 kilobyte
Untuk 50 gambar, saya akan membutuhkan penyimpanan 1,375 megabita.
Apakah perhitungan saya benar?
Jawaban:
Ya.
Maksud Anda piksel per ikon. Namun demikian, Anda tidak dapat menghasilkan piksel fraksional, sehingga jumlah Anda harus 65 x 65 atau 66 x 66. Dan ini mengarah pada penyederhanaan lebih lanjut. Mengapa tidak membuat ikon Anda 64 x 64? Ini akan menyederhanakan perhitungan alamat untuk memori Anda, dan hanya akan menghasilkan "penyusutan" sekitar 2%. Dan percayalah, pada ukuran ini tidak ada yang akan memperhatikan. Maka ikon Anda akan berukuran 4.096 piksel.
Nggak. Seperti yang baru saja dijawab jms, totalnya adalah 18 bit per piksel, atau 6 bit per warna. Sekali lagi, Anda harus mempertimbangkan untuk tidak terlalu mengkhawatirkan level bit. Simpan nilai warna Anda sebagai byte parsial (6 bit per byte) dengan byte terpisah per warna. Ini akan memakan 33% lebih banyak memori, tetapi secara drastis akan mengurangi beban pemrosesan Anda saat mentransfer dari memori ke layar.
Total bit adalah 4096 x 24, atau 98304 bit, atau 12288 byte.
12288 kali 50 menghasilkan 614400 byte.
sumber
(display_width * display_height * bpp) / 8
byte?Jadikan hidup sederhana untuk diri sendiri dengan membuat ikon 64 × 64 piksel. Gambar perbatasan di sekitar mereka jika Anda ingin mereka terlihat lebih besar.
Dengan format warna 16-bit, ini hanya membutuhkan 8 kB per ikon, atau 400 kB untuk set 50.
Salah satu bentuk kompresi sederhana adalah dengan menggunakan tabel warna alih-alih menyimpan warna setiap piksel secara langsung. 16 warna seringkali lebih dari cukup untuk sebuah ikon, terutama jika Anda menerapkan sedikit dithering kreatif. Ini mengurangi penyimpanan menjadi 2 kB per ikon, ditambah 32 byte untuk tabel warna. Total penyimpanan sedikit di atas 101 kB jika setiap ikon memiliki tabel warnanya sendiri.
Hanya untuk memuaskan rasa ingin tahu saya sendiri, saya mengambil gambar "kasus terburuk" berikut (dari sini ):
Baris perintah ImageMagick ini
mengubahnya menjadi ini:
Tidak buruk, dan tentu saja sumber gambar dengan rentang warna yang lebih terbatas akan keluar lebih baik. Misalnya, inilah Olin, diproses dengan cara yang sama:
sumber
Lebih lanjut tentang kedalaman warna
Memperluas jawaban Dave Tweed, Anda bisa melakukan lebih baik dari apa yang dia tunjukkan.
Ini adalah asli ukuran besar yang sama yang digunakannya:
Dipotong menjadi persegi dan menyusut menjadi 64 x 64 piksel tetapi menggunakan hasil warna penuh (8 bit per merah, grn, blu):
Membulatkan informasi warna dari 8 bit per saluran menjadi 6 bit menghasilkan:
Itulah yang dapat dilakukan layar Anda, karena Anda mengatakannya mendukung kedalaman warna 18 bit.
Membulatkan informasi warna lebih lanjut menjadi 5 bit untuk merah, 6 untuk hijau, dan 5 untuk biru, dengan total 16 bit / piksel hasil:
Ini seharusnya cukup bagus untuk ikon.
Bahkan tanpa kompresi apa pun, ikon format ini hanya membutuhkan 64 x 64 x 2 = 8192 byte. 50 gambar seperti itu akan membutuhkan 409.600 byte.
sumber
Perkiraan Anda salah. Nilai "18 bit" adalah per piksel , bukan per warna. Saluran merah, hijau dan biru masing-masing memiliki kedalaman bit maksimum 6 bit (64 nilai berbeda), total 18 bit.
Pengontrol tampilan ini juga mendukung mode 16-bit (di mana data piksel hanya memiliki 5 bit untuk merah, 6 untuk hijau dan 5 untuk biru) yang membuatnya mudah untuk mengemas setiap piksel menjadi hanya dua byte. Ini membuatnya lebih mudah untuk menyimpan bitmap secara efisien dan meningkatkan jumlah piksel yang dapat Anda tulis ke layar per detik.
Anda tidak dapat dibilang menyimpan pecahan piksel, sehingga bitmap Anda yang sebenarnya (gambar / sprite / karakter / apapun) mungkin akan menjadi 65 2 = 4225 piksel.
Melangkah dengan mudah (format 16-bit R5G6B5 pixel), 4225 * 16 bit akan berjumlah hingga 67600 bit per bitmap, atau 8450 byte per bitmap. 50 gambar membutuhkan 423 kB (tanpa kompresi).
Jika Anda benar-benar menginginkan kedalaman warna penuh, Anda membutuhkan lebih dari 2 byte per piksel. Pada tahap itu Anda mungkin juga mencurahkan satu byte untuk setiap warna (seperti yang disarankan WhatRoughBeast), yang selanjutnya akan meningkatkan kebutuhan penyimpanan sebesar 3/2 (634 kB untuk 50 65x65 bitmap).
Anda juga dapat mengemas piksel 18-bit tepat di samping satu sama lain dalam memori (bit subpixel tidak selaras dengan batas byte), tanpa membuang bit apa pun. Anda hanya membutuhkan 476 kB untuk bitmap 18-bit 50 65x65, tetapi akan merepotkan untuk diprogram dan lebih lambat untuk diproses.
sumber