Кодування графічних�даних
Нова українська школа
Урок 3
Інформатика 8
teach-inf.com.ua
за підручником
Бондаренко О.О. та ін.
Кодування графічних даних
Як ви вже знаєте, існує два основних способи кодування графічних даних:
Растровий
Векторний
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Растрові зображення
Пригадаємо, що растровим називають зображення, подане як набір окремих крапок — пікселів (від англ. рicture еlement — елемент малюнка).
Піксель є найдрібнішою частинкою растрового зображення.
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Растрові зображення
Як побудоване растрове зображення, легко зрозуміти, якщо відкрити в графічному редакторі фотографію і значно її збільшити. На рисунку показано пікселі, вишикувані в рядки і стовпці.
Зображення на екрані монітора також має подібну будову, але через малий розмір пікселів ми бачимо його суцільним.
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Растрові зображення
Кожен піксель має певний колір, і змінити його можна тільки повністю. Змінити колір частини піксела неможливо.
Для кодування зображення числами потрібно:
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Растрові зображення
Зазвичай кодування зображення числами виконують за допомогою пристроїв, найвідомішими з яких є:
цифровий фотоапарат
сканер
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Кодування кольору
Щоб закодувати двоколірне (наприклад, чорно-біле) зображення, достатньо позначити колір кожного пікселя числом 0 (перший колір) або 1 (другий колір).
Для зберігання коду пікселя вистачить одного біта, тому кажуть, що двоколірне зображення має глибину кольору 1 біт.
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Кодування кольору
Глибина кольору зображення — це кількість бітів, які використовуються для кодування кольору одного пікселя.
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Кодування кольору
Зображений будиночка складається з пікселів восьми кольорів, які утворюють 32 рядки по 35 пікселів у кожному. Для кодування восьми кольорів достатньо десяткових чисел від 0 до 7, які можна подати двійковими послідовностями довжиною 3 біти, оскільки
23 = 8. Отже, глибина кольору зображення 3 біти.
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Кодування кольору
Побудуємо таблицю десяткових і двійкових кодів цих кольорів:
Колір | Код | Колір | Код |
Чорний | 010 = 0002 | Червоний | 410 = 1002 |
Синій | 110 = 0012 | Пурпуровий | 510 = 1012 |
Зелений | 210 = 0102 | Жовтий | 610 = 1102 |
Блакитний | 310 = 0112 | Білий | 710 = 1112 |
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Кодування кольору
Закодуємо зображення послідовністю чисел, зазначивши ширину й висоту в пікселях і коди їх кольорів, перелічені зліва направо зверху вниз:
35 32 7 7 7 7 7 5 5 7 1 1 7 і т. д.
За глибини кольору 3 біти довжина двійкового коду кольорів пікселів зображення будиночка становитиме:
35 x 32 x 3 = 3360 (бітів) або
3360 : 8 = 420 (байтів)
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Кодування кольору
За глибини кольору 8 бітів (або 1 байт) можна закодувати:
28 = 256 різних кольорів
а за глибини кольору 16 бітів (або 2 байти):
216 = 65 536 кольорів
Проте для досягнення фотографічної якості потрібна більша глибина кольору — 24 біти:
224 = 16 777 216 кольорів
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Кодування кольору
Як бачимо, зі збільшенням кількості кольорів глибина кольору зростає. За однакової кількості пікселів зображення це призводить до збільшення обсягу файлу.
У файлі растрового зображення зберігаються:
значення розмірів зображення
коди кольорів усіх пікселів
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Кодування кольору
Файли більшості растрових форматів містять також іншу інформацію про зображення:
дані про прозорість пікселів
тип фотокамери
коментарі тощо
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Кодування кольору
Складемо програму мовою Python для виведення на екран растрового зображення, якщо відомий його код.
Пікселі зобразимо квадратиками — відбитками Черепашки відповідних кольорів.
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Кодування кольору
from turtle import*
pic = list(map(int,input().split())) # Вводимо растровий код
W, H = pic.pop(0), pic.pop(0) # Відокремлюємо ширину W і висоту Н
pencolor('black')
shape('square'); shapesize(outline = 1)
size = 20 # Типовий розмір квадратика-Черепашки (пікселя)
colors = ['black', 'blue', 'green', 'brown', 'red', 'violet' ,'yellow', 'white’]
up(); hideturtle()
for r in range(H):
for c in range(W): # Малюємо рядок пікселів
fillcolor(colors[pic[r*W+c]])
stamp() # Ставимо відбиток-піксель
forward (size)
back(W*size); right(90) # Перехід на початок
forward(size); left(90) # наступного рядка
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Векторні зображення
Пригадаймо, що векторним називають зображення, яке складається з графічних примітивів — геометричних об’єктів:
Отже, базовим елементом векторного зображення є лінія, описана математичною формулою.
відрізків
кіл
кривих тощо
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Векторні зображення
У найпростішому випадку криволінійний контур графічного примітива можна розглядати як ланцюжок прямолінійних відрізків, тобто ламану.
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Векторні зображення
У такому випадку векторний код контуру буде послідовністю чисел, яку можна побудувати так:
кількість відрізків N
перше число
2(N+1) чисел — координати послідовних вершин ламаної
наступні
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Векторні зображення
Контур літери К тричі зобразили ланцюжками відрізків, щоразу збільшуючи їх кількість на криволінійних ділянках. Як бачимо, зі збільшенням кількості відрізків зростає точність відтворення криволінійного контуру.
початковий контур
15 відрізків
24 відрізки
42 відрізки
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Векторні зображення
Векторний код контуру літери К із 15 відрізків складатиметься з:
1+2·(15+1)=33 числа
і може бути таким:
15 0 0 5 38 14 39 10 25 22 38 28
31 22 27 20 31 12 20 22 19 20 0 12
0 16 17 9 17 5 0 0 0
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Векторні зображення
Тому в програмі для виведення малюнка достатньо повторити виведення контуру, доки в коді залишаються неопрацьовані дані.
Якщо малюнок складається з кількох контурів, можна послідовно записувати коди кожного з них. Це не ускладнить розкодування, оскільки кількість чисел у коді одного контуру цілком визначається кількістю відрізків, зазначеною на початку.
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Векторні зображення
Складемо програму для виведення на полотно зображення контуру, заданого векторним кодом:
from turtle import *
size = 4 # Масштабний множник
x0 = y0 = 0# Координати початкової точки
vector_code = input() # Вводимо рядок з векторним кодом
# Перетворюємо рядок на список чисел
x = list(map(int, vector_code.split()))
N = x.pop(0) # Відокремлюємо кількість відрізків у змінну N
y = x[1::2] # Формуємо список координат у
x = x[0::2] # Формуємо список координат х
up()
goto(x0, y0) # Йдемо в початкову точку
down()
for v in range(1, N+1): # Будуємо відрізки
goto(x0+size*x[v], y0+size*y[v])
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Векторні зображення
Після запуску програми, увівши рядок із кодом, ми побачимо, як Черепашка послідовно малює відрізки, з яких утворюється векторне зображення.
Ми розглянули прості приклади растрового і векторного кодувань малюнків, проте в більшості випадків на практиці застосовуються значно складніші коди.
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Питання для самоперевірки
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Розгадайте ребус
Графіка
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Домашнє завдання
Проаналізувати
с. 16-21
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Працюємо за комп’ютером
Сторінка
21
Розділ 1
§ 3
© Вивчаємо інформатику teach-inf.com.ua
Успіхів�у навчанні!
Нова українська школа
Урок 3
Інформатика 8
teach-inf.com.ua
за підручником
Бондаренко О.О. та ін.