Програмування растрового зображення
Маючи код растрового зображення, можна скласти програму для виведення його на екран, зобразивши пікселі квадратиками відповідних кольорів.
from tkinter import* |
#Завантаження модуля для створення графічного інтерфейсу
|
raster = input() | # Вводимо рядок із кодом зображення |
pic = list(map(int, raster.split())) |
# Перетворюємо рядок на список чисел |
W, H = pic.pop(0), pic.pop(0) | # Відокремлюємо ширину W і висоту H |
size = 20 | # Розмір квадратика-пікселя |
root = Tk() |
# Створюємо вікно програми |
canvas = Canvas(root, width = size*W, height = size*H) canvas.pack() |
# Створюємо полотно необхідного розміру |
color = ['black', 'blue', 'green', 'brown', 'red', 'violet', 'yellow', 'white'] | # Список кольорів |
for r in range(H): | # Цикл по рядках растру |
for c in range(W):
canvas.create_rectangle(c*size, r*size,_ (c+1)*size, (r+1)*size,_ fill = color[pic[r*W+c]])
|
# Заповнення клітинок у рядку |
root.mainloop() |
#Запуск головного циклу
обробки подій
|
Приклад:
Якщо увести код
5 4 6 4 4 4 6 4 1 6 1 4 4 1 6 1 4 6 4 4 4 6
програма створить зображення, наведене на рис.1.
Рис.1
Побудова векторного зображення
Проаналізуємо програму для виведення на полотно зображення контуру, заданого векторним кодом:
from tkinter import* |
#Завантаження модуля для
створення графічного інтерфейсу
|
vector = input() |
# Вводимо рядок із кодом контуру |
x = list(map(int, vector.split())) |
# Перетворюємо рядок на список чисел |
N = x.pop(0) | # Відокремлюємо кількість відрізків у змінну N |
y = x[1 :: 2] x = x[0 :: 2] |
# Формуємо список
координат y
# Формуємо список
координат x
|
size = 40 | # Масштабний множник |
root = Tk() | # Створюємо вікно програми |
w = size*max(x); h = size*max(y)
canvas = Canvas(root, width = w, height = h)
canvas.pack() |
# Обчислюємо висоту і ширину полотна
# Створюємо полотно необхідного розміру
|
color = ['black', 'blue', 'green', 'brown', 'red', 'violet', 'yellow', 'white'] | # Список кольорів |
for v in range(N):
canvas.create_line(size*x[v],_
h-size*y[v], size*x[v+1], h-size*y[v+1])
|
# Будуємо N відрізків від точки (х[v],y[v]) до точки (x[v+1], y[v+1]) |
root.mainloop() |
#Запуск головного циклу
обробки подій
|
Приклад:
Запустивши програму та увівши код
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
ми побачимо вікно з виведеним векторним зображенням (рис. 2). Це зображення виявилося віддзеркаленим відносно горизонтальної осі, оскільки вісь y на полотні спрямована донизу.
Рис.2
Щоб зображення виводилося не віддзеркаленим, треба ординати кінців відрізків обчислювати за формулами (рис.3):
h-size*y[v] ; h-size*y[v+1])
Рис.3
Джерела:
Інформатика : підруч. для 8 кл. закл. загал. серед. освіти / [О. О. Бондаренко, В. В. Ластовецький, О. П. Пилипчук, Є. А. Шестопалов]. — Харків : Вид-во «Ранок», 2021.