Что компьютер знает о картинке?
Компьютер видит картинку не так, как мы. Для него это просто сетка из точек — пикселей.
Для каждого пикселя нужно запомнить только одно: его цвет.
1. Делим на пиксели
Картинка становится таблицей точек.
2. Кодируем цвет
Каждому пикселю записываем код его цвета.
3. Складываем всё вместе
Коды пикселей идут один за другим.
Поэтому объём картинки — это количество пикселей × количество бит на один пиксель.
Главная формула
Сколько пикселей?
Если изображение имеет размер \(X \times Y\), то:
\(K = X \cdot Y\)
\(K\) — количество пикселей.
Сколько бит на пиксель?
\(i\) — глубина цвета: сколько бит нужно для хранения цвета одного пикселя.
\(i = \lceil \log_2 N \rceil\)
Как найти весь объём?
Умножаем количество пикселей на вес одного пикселя.
\(I = K \cdot i\)
\(I\) получаем в битах.
Микропаттерн: пиксели × биты на один пиксель. Это основа почти всех задач про растровые изображения.
Если дана палитра из N цветов
Нужно понять, сколько бит требуется для кодирования одного цвета.
256 цветов
\(2^8 = 256\)
Значит, \(i=8\) бит.
4096 цветов
\(2^{12} = 4096\)
Значит, \(i=12\) бит.
Например, 200 цветов
\(2^7=128\) — мало.
\(2^8=256\) — хватает.
Значит, \(i=8\).
Нужно выбрать минимальное целое \(i\), для которого \(2^i \ge N\).
Важно: 4096 цветов — это не 4096 бит. Для кодирования 4096 вариантов достаточно всего 12 бит.
Пример: афиша фестиваля
Растровое изображение имеет размер 1024 × 768 пикселей и палитру из 256 цветов.
1. Считаем пиксели
\(K = 1024 \cdot 768 = 786432\)
2. Находим глубину
\(256=2^8\)
Значит, \(i=8\).
3. Считаем объём
\(I=786432\cdot8=6291456\) бит.
4. Переводим
\(6291456:8:1024=768\) Кбайт.
Ответ: 768 Кбайт.
Пример: видеобуфер
Компьютер поддерживает разрешение 2400 × 1600 пикселей. Каждый пиксель может иметь один из 4096 цветов. Найдём объём видеобуфера в Кбайтах.
Пиксели
\(K=2400\cdot1600=3840000\)
Глубина цвета
\(4096=2^{12}\)
Значит, \(i=12\).
Объём
\(I=3840000\cdot12=46080000\) бит.
Перевод
\(46080000:8:1024=5625\) Кбайт.
Ответ: 5625.
Программное решение
Программа нужна не потому, что формула сложная. Она помогает не ошибиться в больших числах.
1. Запиши данные
Ширину, высоту и количество цветов сохраняем в переменные.
2. Найди i
Нужно узнать, сколько бит требуется на один пиксель.
3. Запиши формулу
\(I=X\cdot Y\cdot i\).
4. Переведи и выведи
Переводи результат только в те единицы, которые просит задача.
Если число цветов не является степенью двойки, используем округление вверх: \(i=\lceil\log_2N\rceil\) .
Например:
math.log2(256) → 8;
math.log2(200) → примерно 7.64, а math.ceil(...) округляет до 8.
Поэтому в начале программы понадобится: import math.