# Pokročilá bitmapová grafika

## Změna měřítka

- změna velikosti = změna počtu pixelů
- obvykle změna na ose x a y

**Princip**
- stanovit hodnoty v nových bodech
	- výsledek by měl být stejný, jako bychom původní signál vzorkovali s tímto rozlišením
- zvětšení 4x metodou nejbližšího souseda
	- nejjednodušší, nejrychlejší
	- obvykle nevhodné
	- z [00 40 80 80] dostanu [00 00 00 00 40 40 40 40 80 80 80 80 80 80 80 80]
- zvětšení 4x metodou (bi)lineární interpolace
	- jednoduché a rychlé
	- stardardní volba pro většinu grafických knihoven
	- vhodné jen pro malá zvětšení
	- z [00 40 80 80] dostanu [00 10 20 30 40 50 60 70 80 80 80 80 80 80 80 80]
- zvětšení 4x metodou (bi)kubické interpolace
	- pro každou dvojici sousedních pixelů najít kubickou funkci $f(t)$ takovou, že $f(0)$ = první pixel, $f(1)$ = druhý
	- stanovit hodnoty $f(0.25), f(0.5)$ a $f(0.75)$
	- vhodné zejména pro větší zvětšení  
	- lépe zachovává hrany  
	- podstatně pomalejší

**Zvětšení kx**
- k je reálné číslo > 1

**Zmenšení kx**
- k je reálné číslo z (1, 2)
- k je reálné číslo >= 2 - problém s kvalitou všech tří metod

Zmenšení 2x metodou nejbližšího souseda
- jedná se o princip vzorkování
- každý druhý pixel vynechá
- nejjednodušší možné
- použitelné v praxi pro velmi rychlé náhledy
- vynechání každého druhého pixelu

**Aliasing**
- vzniká při vzorkování obrazu s opakujícím se vzorem, pokud vzorkovací frekvence $f_{s}$ je srovnatelná s frekvencí $f_{p}$ opakování vzoru
- $f_{s} = 1 /$ vzdálenost středů sousedních pixelů  
- $f_{p} = 1 /$ vzdálenost začátků opakovaného vzoru  
- $f_{s} > 2f_{p} \to$ frekvence již nejsou srovnatelné
+ úplné odstranění prakticky nemožné
+ potlačení (anti-aliasing)
	+ nebude tolik rušivý
	+ metoda tzv. super-samplingu
		+ relativně rychlé
	+ ClearType
		+ využívá znalostí rozložení R, G, B prvků displeje
		+ mění barvu krajních pixelů pro dosažení průměrování

**Mip-maping**
- technika pro zobrazování velkých obrázků na různé úrovni přiblížení
- obrázek bývá rozřezán na rozumně velké bloky (např. 256x256 px)
- bloky jsou zmenšeny na různé rozměry
	- lze použít náročné metody díky využití pre-procesingu
- při zobrazení je možno
	- vybrat nejvhodnější vygenerované rozlišení a jeho výřez zobrazit
	- vybrat nejvhodnější vyšší rozlišení a změnit jeho měřítko tak, aby to vyhovovalo požadavkům

**Konvoluční filtrování**
- používá se např. pro
	- rozmazání obrázku pro eliminaci šumu (Gaussovský filtr)
	- detekce hran v obrázku
	- vytvoření vrženého stínu
- obdoba bilineární filtrace
	- žádné pixely nezahazujeme

## Kreslení do bitmapy

- doplnění popisků, anotace, ...

**Manuální**
- programátor mění obsah jednotlivých pixelů bitmapy
- např. rozpoznání obrazu či přebarvení obrázku

**Automatické**
- nad bitmapou se vytvoří grafický kontext
- kreslí se do grafického kontextu voláním obvyklých metod
- např. doplnění vektorové grafiky do obrázku (popisky, křivky silnic, šipky, ...)
- klíčové pro tzv. double-buffering

**Double buffering**
- místo kreslení rovnou na obrazovku kreslíme do bitmapy o stejné velikosti
- výsledek se poté zobrazí na obrazovku (1:1)
- pomalejší, ale nezbytné pro animace

**Vodoznak**
- nejčastěji pro účely copyrightu
- může být viditelný (neměl by jít snadno retušovat)
- může být neviditelný
	- obrázek není viditelně poškozen
	- data vodoznaku skryta (modifikují se barvy pixelů)
	- používají se různé algoritmy
	- autor může dokázat, že se jedná o jeho obrázek
	- možno použít i pro ověření pravosti dat

**Alfa kanál**
- doplňuje barevnou informaci (např. RGB) o to, zda pixel je průhledný (0) či nikoliv (1)
- částečná průhlednost = hodnota z intervalu 0.0 - 1.0
- v praxi nejčastěji ukládán do 8 bitů (256 úrovní)
- umožňuje snazší spojení dvou bitmap do sebe

**Vrstvy**
- výsledný obraz vznikne složením obrázků přes sebe
- vrstvy lze ukládat/načítat oddělené

**Alfa kompozice**
- vrstvy se skládají na základě informace o průhlednosti (tzv. alfa)
- může být specifikována pro celý obrázek nebo zvlášť pro jednotlivé pixely

**Maximum (lighten)**
- černá = pozadí
- bílá = to, co má být vidět

**Minimum (darken)**
- opak maxima

**Multiply**
- lokální ztmavení obrázku X a Y určuje míru ztmavení