Digitāls attēls ir veidots kā mozaīka no daudzām "flīzēm" jeb pikseļiem, kur katra no tām ir citā krāsā. Šo flīžu parasti attēlā ir ļoti daudz. Krāsu katrai flīzei apraksta kādā no krāsu sistēmām, bet visbiežāk izmanto RGB (Red Green Blue). Katra komponente tiek aprakstīta ar skaitli no 0 līdz 255, kas norāda tās intensitāti.
Attēliem iespējams pielietot filtrus, kas izmaina tā nokrāsu vai pavisam izmaina krāsu attēlojumu. Apskatīsim Grayscale jeb pelēktoņu filtru.
Viens no biežāk izmantotajiem attēlu filtriem ir pelēktoņa filtrs – tas pārveido krāsainu attēlu par melnbaltu (ar dažādiem pelēkās krāsas toņiem).
Atceries:
sarkanā (R), zaļā (G) un zilā (B) vērtības ir 0, pikselis ir melns.255, pikselis ir balts.Lai pārvērstu pikseli par pelēktoņa versiju, mums tikai jāpārliecinās, ka visas trīs krāsas vērtības ir vienādas. Bet kādu tieši skaitli izvēlēties?
R, G un B bija lielas vērtības, arī jaunajai vērtībai vajadzētu būt lielai.Lai jaunais pikselis saglabātu līdzīgu spilgtumu kā sākotnējais, vienkāršākais veids ir aprēķināt vidējo vērtību no R, G un B komponentēm:
jauna_vertiba = (R + G + B) / 3 #pelēktoņa aprēķins pikselim
Pēc tam šo vērtību iestata visām trim krāsām. Ja to izdarīsi katram pikselim attēlā, iegūsi tā pelēktoņa versiju.
Tavs uzdevums ir funkcijā apply_grayscale() sastādīt ciklisku algoritmu, kas caurskata visu pikseļu matricu un veic kalkulāciju visiem pikseļiem.
Lai realizētu atspulga efektu, nepieciešams "apvērst" pikseļu matricu, pirmo rindu padarot par pēdējo, bet pēdējo - par pirmo. To var darīt dažādi, bet ērti saformēt otru pagaidu matricu (PIXEL_ART_REFLECTION), kur rindas izkārtotas apgrieztā secībā.
Paraugs:
for rinda in PIXEL_ART:
for pikselis in rinda:
# te sastādi formulu
import tkinter as tk
from tkinter import ttk
# === Pikseļu dati ===
PIXEL_ART = [
[None, None, (200,200,200), (200,200,200), (200,200,200), (200,200,200), (200,200,200), (200,200,200), (200,200,200), (200,200,200), None, None],
[None, (200,200,200), (255,200,150), (255,200,150), (255,200,150), (255,200,150), (255,200,150), (255,200,150), (255,200,150), (255,200,150), (200,200,200), None],
[(200,200,200), (255,200,150), (255,150,100), (255,150,100), (255,150,100), (255,150,100), (255,150,100), (255,150,100), (255,150,100), (255,150,100), (255,200,150), (200,200,200)],
[(200,200,200), (255,200,150), (255,150,100), (100,100,100), (255,150,100), (255,150,100), (255,150,100), (255,150,100), (100,100,100), (255,150,100), (255,200,150), (200,200,200)],
[(200,200,200), (255,200,150), (255,150,100), (255,150,100), (255,150,100), (200,200,200), (200,200,200), (255,150,100), (255,150,100), (255,150,100), (255,200,150), (200,200,200)],
[(200,200,200), (255,200,150), (255,150,100), (255,150,100), (255,150,100), (255,200,150), (255,200,150), (255,150,100), (255,150,100), (255,150,100), (255,200,150), (200,200,200)],
[None, (200,200,200), (255,200,150), (255,150,100), (255,150,100), (255,150,100), (255,150,100), (255,150,100), (255,150,100), (255,200,150), (200,200,200), None],
[None, None, (200,200,200), (255,200,150), (255,150,100), (255,150,100), (255,150,100), (255,150,100), (255,200,150), (200,200,200), None, None],
[None, None, None, (200,200,200), (200,200,200), (255,200,150), (255,200,150), (200,200,200), (200,200,200), None, None, None],
[None, None, None, None, (200,200,200), (200,200,200), (200,200,200), (200,200,200), None, None, None, None],
[None, None, None, None, None, (150,150,150), (150,150,150), None, None, None, None, None]
]
ROWS = len(PIXEL_ART)
COLS = len(PIXEL_ART[0])
# === Globālie mainīgie ===
PIXEL_SIZE = 30 # konstants pikseļa izmērs
# === Funkcijas ===
def rgb_to_hex(rgb):
r, g, b = rgb
return f'#{r:02x}{g:02x}{b:02x}'
def draw_pixels():
canvas.delete("all")
s = PIXEL_SIZE
for r in range(ROWS):
for c in range(COLS):
val = PIXEL_ART[r][c]
x0, y0 = c * s, r * s
x1, y1 = x0 + s, y0 + s
color = "white" if val is None else rgb_to_hex(val)
canvas.create_rectangle(x0, y0, x1, y1, fill=color, outline="")
# === Filtru funkcijas — tukšas (TODO) ===
def apply_grayscale():
"""TODO: Pievieno grayscale algoritmu."""
pass
def apply_reflection():
"""TODO: Pievieno atspulga algoritmu."""
pass
# === Galvenā programma ===
root = tk.Tk()
root.title("Kaķis")
# Canvas
canvas = tk.Canvas(root, width=COLS * PIXEL_SIZE, height=ROWS * PIXEL_SIZE, bg="white")
canvas.pack(padx=8, pady=8)
# Pogas
controls = ttk.Frame(root)
controls.pack(padx=8, pady=(0, 8), fill="x")
ttk.Button(controls, text="Pelēkais filtrs", command=apply_grayscale).pack(side="left", padx=4)
ttk.Button(controls, text="Atspulgs", command=apply_reflection).pack(side="left", padx=4)
# Sākotnējā zīmēšana
draw_pixels()
root.mainloop()