"Информатика (базовый уровень)", Гейн А.Г., Гейн А.А.
Цвет в растровом изображении хранится не как название, а как числовой код, связанный с каждым пикселем. Кодирование позволяет компьютеру сохранять, обрабатывать и передавать цветные изображения. В модели RGB цвет получают смешением красной, зелёной и синей составляющих, а глубина цвета определяет число доступных вариантов. От способа кодирования зависят качество изображения и объём файла.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Пиксель — минимальный элемент растрового изображения, которому при кодировании задаётся цвет. Из множества пикселей складывается вся картинка, поэтому изображение можно представить как таблицу маленьких точек. Чем больше пикселей приходится на одну область, тем подробнее можно передать её границы и цветовые переходы.
Цветовая модель RGB — способ представления цвета интенсивностями красной, зелёной и синей составляющих. Каждую составляющую называют каналом, а её значение записывают числом. Такая модель нужна, чтобы однозначно описывать цвет, который формируется на экране смешением световых сигналов.
Глубина цвета — количество бит, отведённых для кодирования цвета одного пикселя. Она показывает, сколько разных цветовых вариантов может выбрать компьютер. Этот показатель используют, чтобы оценить точность передачи оттенков и объём памяти, необходимый для изображения.
Палитра — набор заранее заданных цветов, каждому из которых соответствует числовой код. В пикселе при таком способе хранится номер элемента палитры, а не все составляющие цвета. Палитра удобна, когда изображение использует немного оттенков и нужно уменьшить размер данных.
Растровое изображение представляется как прямоугольная сетка пикселей, и для каждого пикселя хранится код цвета. Такой способ удобен для компьютера: изображение превращается в последовательность чисел, которую можно записать в память и обработать. Размер данных растёт вместе с числом пикселей, потому что каждому элементу сетки нужен собственный код.
В модели RGB цвет получается смешением красной, зелёной и синей составляющих; изменение интенсивности каждой составляющей меняет итоговый цвет. Нулевая интенсивность означает отсутствие соответствующего светового сигнала, а увеличение значения делает канал ярче. Поэтому один и тот же пиксель можно постепенно менять, регулируя три числа, а не выбирая цвет из длинного списка названий.
При глубине цвета n бит можно закодировать 2ⁿ различных вариантов цвета, потому что каждый бит имеет два состояния: 0 или 1. Перебор всех сочетаний этих состояний и даёт число кодов, равное произведению двоек n раз. Поэтому увеличение глубины цвета расширяет набор оттенков, но одновременно увеличивает объём памяти на каждый пиксель.
В полноцветном режиме для RGB обычно используют по 8 бит на каждую составляющую, то есть 24 бита на пиксель и 2²⁴ возможных цветов. У каждого канала тогда 256 уровней интенсивности: от 0 до 255. Перемножение трёх независимых наборов значений даёт 16 777 216 комбинаций, поэтому можно передавать плавные переходы и множество оттенков.
При палитровом кодировании в пикселе хранится не полный цвет, а номер цвета в палитре, что уменьшает объём данных при ограниченном числе оттенков. Например, для 256 цветов достаточно 8 бит, хотя сами цвета могут быть описаны более подробно в отдельной таблице. Экономия достигается потому, что одинаковые цвета не повторяются полностью в каждом пикселе, а заменяются короткими индексами.
| Режим кодирования | Бит на пиксель | Количество цветов | Что хранится в коде | Объём данных на пиксель |
|---|---|---|---|---|
| Чёрно-белое изображение | 1 | 2 | Код чёрного или белого цвета | 1 бит |
| Изображение в градациях серого | 8 | 256 | Уровень яркости серого | 1 байт |
| Палитровое изображение с 16 цветами | 4 | 16 | Номер цвета в палитре | 4 бита |
| Палитровое изображение с 256 цветами | 8 | 256 | Номер цвета в палитре | 1 байт |
| Полноцветное RGB-изображение | 24 | 2²⁴ | Значения красного, зелёного и синего каналов | 3 байта |
Сначала по строке находят глубину цвета и число доступных вариантов, а затем смотрят, какие именно данные записываются для пикселя. Для палитрового режима нужно учитывать также саму таблицу цветов, если вычисляется полный размер файла. Значения в последнем столбце относятся к одному пикселю и не включают заголовки или сжатие.
Условие: определить цвет пикселя с кодом RGB(255, 0, 0) и RGB(0, 255, 255). Нужно сопоставить каждое число с интенсивностью красного, зелёного и синего каналов. Значение 0 означает отсутствие соответствующего канала, а 255 — его максимальную интенсивность.
Ответ: RGB(255, 0, 0) — красный цвет; RGB(0, 255, 255) — голубой цвет.
Условие: найти объём несжатого изображения размером 800 × 600 пикселей с глубиной цвета 24 бита. Сначала нужно определить общее количество пикселей, затем умножить его на число бит для одного пикселя. После этого результат переводится в байты, поскольку 1 байт = 8 бит.
Ответ: объём пиксельных данных равен 1 440 000 байт, или примерно 1,44 Мбайт.
Условие: изображение 1024 × 768 пикселей использует палитру из 256 цветов. Найти объём кодов пикселей и сравнить его с полноцветным RGB-кодированием. Число 256 равно 2⁸, поэтому палитровый индекс занимает 8 бит, тогда как RGB-код занимает 24 бита.
Ответ: палитровое кодирование занимает 786 432 байта, а RGB — 2 359 296 байт; разница объясняется глубиной 8 и 24 бита на пиксель.
Считать, что при глубине цвета n бит кодируется n цветов, неверно: каждый бит имеет два состояния, поэтому вариантов 2ⁿ. Такую ошибку допускают, когда путают число разрядов с числом комбинаций. Проверка проста: для 1 бита должно получаться 2 цвета, для 2 бит — 4.
Иногда 24-битный RGB-код ошибочно принимают за 24 бита на каждый канал. На самом деле 24 бита делятся между тремя каналами поровну: по 8 бит. Убедиться можно вычислением 3 · 8 = 24 и сравнением с объёмом 3 байта на пиксель.
Путаница порядка каналов RGB приводит к неверному определению цвета. В записи RGB числа читаются именно как красный, зелёный, синий, поэтому RGB(255, 0, 0) не может быть зелёным. Перед ответом полезно подписать каждое значение названием канала.
При расчёте размера изображения забывают перевести биты в байты или не учитывают число пикселей. Нужно последовательно умножить ширину на высоту и глубину цвета, а затем разделить на 8. Если результат оказался одинаковым для изображений разного разрешения, расчёт почти наверняка неполный.
Для понимания кодирования цвета нужны двоичное кодирование, степени двойки, единицы измерения информации и представление растрового изображения. Эти знания объясняют, откуда берётся формула 2ⁿ и как переводить биты в байты. Без них трудно оценивать объём данных по разрешению и глубине цвета.
Тема используется при оценке размера графических файлов, выборе качества изображения и параметров экрана или камеры. Чем больше разрешение и глубина цвета, тем подробнее изображение, но тем больше требования к памяти и скорости передачи. Поэтому параметры выбирают с учётом задачи и доступных ресурсов.
Дальше эти знания пригодятся при изучении форматов изображений, сжатия данных и различий между цветовыми моделями RGB и CMYK. Форматы по-разному хранят пиксели, палитру и дополнительные сведения. Понимание базового кода помогает объяснить, почему после сжатия размер файла меняется, а качество может сохраняться или ухудшаться.
Почему смешение красного и зелёного в RGB даёт жёлтый цвет?
В модели RGB используются световые, а не красочные составляющие. При сложении красного и зелёного света без синего глаз воспринимает результат как жёлтый.
Почему 24 бита позволяют закодировать 2^24 цветов?
В 24-битном коде есть три канала по 8 бит. Каждый канал имеет 2⁸ = 256 значений, поэтому всего получается 256 · 256 · 256 = 2²⁴ вариантов.
Чем палитровое кодирование отличается от полноцветного RGB?
При палитровом кодировании пиксель хранит номер заранее заданного цвета. В полноцветном RGB для каждого пикселя записываются значения красного, зелёного и синего каналов.
Почему размер изображения может быть большим, даже если на экране оно выглядит небольшим?
Размер файла определяется числом пикселей, а не только видимыми сантиметрами изображения. Маленькая картинка с высоким разрешением и большой глубиной цвета может содержать много данных.
Можно ли определить реальный размер графического файла только по разрешению и глубине цвета?
Для несжатого изображения можно вычислить объём данных пикселей. Реальный размер файла может отличаться из-за заголовка, палитры, служебной информации и применённого сжатия.
§ 14. Кодирование цветовой информации