Задание №7. Размер картинки и звука: считаем объём
Что от тебя хотят
Это почти целиком арифметика. В условии даны параметры файла, а нужно найти его размер в байтах, килобайтах или мегабайтах (или наоборот, найти один параметр по размеру). Баллы теряют не на идее, а на единицах измерения.
Две формулы
| Что | Формула | Что обозначают буквы |
|---|---|---|
| Картинка | I = X · Y · i | X, Y — размеры в пикселях, i — бит на пиксель |
| Звук | I = f · b · k · t | f — частота в Гц, b — бит на отсчёт, k — каналы, t — секунды |
Число бит на пиксель находят из числа цветов N: наименьшее i, для которого 2 ** i >= N. Для 200 цветов это 8, потому что 27 = 128 мало, а 28 = 256 хватает.
Единицы измерения
- В 1 байте 8 бит. В 1 Кбайте 1024 байта, в 1 Мбайте 1024 Кбайта.
- В 1 кГц 1000 Гц (а не 1024).
- Время всегда в секундах: минуты умножаем на 60.
- Стерео это 2 канала, моно 1, квадро 4.
Разбор на живом примере
Изображение размером 640 × 480 пикселей. Для кодирования цвета используется палитра из 200 цветов. Сколько Кбайт занимает несжатое изображение?
- Для 200 цветов нужно 8 бит на пиксель.
- Всего бит: 640 · 480 · 8 = 2 457 600. В байтах это 307 200, в Кбайтах 300.
Ответ: 300 Кбайт.
Звукозапись длится 1 минуту, стерео, частота дискретизации 32 кГц, разрядность 16 бит. Сколько Кбайт занимает файл?
- Подставляем: 32 000 · 16 · 2 · 60 = 61 440 000 бит.
- В байтах 7 680 000, в Кбайтах 7500.
Ответ: 7500 Кбайт. Оба результата подтверждаются кодом в окнах ниже.
Если «было-стало»
Не считай оба объёма целиком. Посмотри, как изменился каждый множитель. Размер картинки удвоили по каждой стороне и палитру увеличили с 16 до 256 цветов? Площадь выросла в 4 раза, бит на пиксель с 4 до 8, то есть в 2 раза, и объём вырос в 8 раз.
Разновидности и прототипы задания на экзамене
Код решения на Python
Запустить код в онлайн-песочницеcolors = 200
x = 640
y = 480
i = 1
while 2 ** i < colors:
i += 1
bits = x * y * i
print(bits / 8 / 1024)
f = 32000
b = 16
k = 2
t = 60
bits = f * b * k * t
print(bits / 8 / 1024)
Типичные ошибки
ГРОБ №7: Сжатие и прозрачность
В условии файл сжимается на 30% и ещё хранится слой прозрачности, на который отводится столько же бит, сколько на цвет. Легко посчитать лишь цвет или забыть про сжатие.
Лайфхаки на экзамене
- Сравнение «было-стало»: считай, во сколько раз изменился каждый множитель, абсолютные числа не нужны.
- Степени двойки полезно помнить: 2^7 = 128, 2^8 = 256, 2^10 = 1024, 2^16 = 65536.