Práce s písmem
Definice písma - obvyklejší, výpočetně dražší Vektorové písmo - obvyklejší, výpočetně dražší - každé písmeno je definováno jako zakřivený nebo polygonální obrys Rastrové písmo - jednodušší, snadno se kreslí, obvykle méně hezké - každý znak specifikován malou obdélníkovou bitmapou
Vytvoření rastrového písma naskenováním zvětšeného obrázku daného znaku - následná úprava jednotlivých pixelů designérem vytvořeny v programu - za základě náčrtku je vytvoří designér - používalo se k vytvoření speciálních písem pro monitory a tiskárny s nízkým rozlišením
Rastrová reprezentace frame buffer - obvykle větší než je potřeba k uložení aktuálního obrazu na monitoru - rychlejší práce -> uložení font cache - používá se i k uložení právě zakrytých částí obrazovky
SRGP - pro práci s rastrovou grafikou (Simple Raster Grafics Package) - copyPixel - automatické ořezání bitmapy znaků
Příklad proporcí cache
Rastrová reprezentace font cache - výška malého a velkého písmene konstantou - šířka individuální pro každý znak - při vykreslovaní se mezi znaky vkládá mezera s pevně stanovenou šířkou v definici typu písma
Definice druhu písma strukturou Typedef struct { int leftX; /* horizontal location */ int width; /* width of image in font cache */ } charLocation; canvasID cache; int descenderHeight, total Height; int interCharacter Spacing; /* Measured in pixel */ charLocation locationTable[128]; } fontCacheDescriptor;
Nevýhody rastrové reprezentace - vyrovnání se s textovým řetězcem obsahujícím více druhů fontů musí být odchyceno a zajištěno aplikačním programem - různá font cache pro každou kombinaci druhu písma, velikosti a stylu - problémy s tvorbou stylu, hlavně kurzívou
Triky pro vytvoření různých stylů písma Problémy se styly písma Triky pro vytvoření různých stylů písma - vyřešení problémů s velkým množstvím různých obrázků pro definici jednoho písmena - nevytváří „hezké“ písmena, třeba tečka nad „i“ pak není kroužek - pokřiví mezery mezi znaky, znesnadňuje výběr oblasti
Vektorová reprezentace - abstraktní podoba, nezávislá na zařízení - polygonální a oblé tvary definované pomocí reálných parametrů - spline křivky - více velikostí z jedné reprezentace, jednoduché převracení, otáčení, vytváření stylů - každý tvar postačuje pouze pro omezený počet velikostí
Geometrický význam tvaru znaku soběpodobnost - některé části musí mít stejnou šířku - musí být zachována určitá topologická charakteristika, vztahy mezi znaky písma Problémy při tvorbě pixelové reprezentace - při různých položeních vzoru ideálního písmene na bitmapu mohou vzniknout rozdílné kopie - výsledek nemusí být vůbec uspokojivý
Naskenováním písmene O může vzniknout nepříjemný výstupek. Problémy při vytvoření bitmapy Naskenováním písmene O může vzniknout nepříjemný výstupek.
Problémy při vytvoření bitmapy takovýmto efektům je třeba se vyhnout - různé programy založené na pravidlech pro vytváření bitmap znaků - písmena i tak musí být ručně doupraveny existují i další problémy - toto je jen jeden asi nejzřetelnější problém
Antialiasing u textu Antialiasing - potlačení roztřepenosti čar - děje se ve spojitém prostoru efekty jako špičky, jamky a nestejnoměrné šířky zmizí velká spotřeba paměti
Odhad spotřeby paměti 1. odhad: - 8 bitů na pixel, 4 styly, deset 128 znakových typů písma, deset velikostí = 50 MB paměti. 2.odhad: - 8 bitů na pixel, 4 styly, dva 128 znakových typů písma, pět velikostí, 8 „stupňů“ (phases) jak v horizontálním, tak vertikálním směru = 50 MB paměti.
Jiný přístup počítáme, až když je to nezbytné - nezabíráme tak paměť znakem, který momentálně nepotřebujeme časově náročnější - vyžaduje přepočítání antialiasingu každého znaku, kdykoli je použit - výpočetně nepraktický - nutno použít adekvátní metodu pro urychlení procesu
Naimanova a Founierova metoda I myšlenka - naskenujeme znak v nějaké velké velikosti a vytvoříme pro něj předlohu - každá předloha je rozdělena do několika obdélníčků - znaky menší velikosti jsou odvozeny od této předlohy jejím filtrováním
Naimanova a Founierova metoda II reprezentace - výsledný znak je vytvořený z předlohy za použití filtrovací funkce - předloha - matice jednicek a nul typu m x m - filtrovací funkce – matice čísel, jejichž součet je 1 výpočet Pokud výsledný znak má být pole typu g x g (g je samozřejmě menší než m), tak na předloze vytvoříme vzorkovací mřížku velikosti taky g x g. V tomto bodě je spočítána hodnota každého bodu ve vzorku: Pro každý bod v filtrovacím poli se hodnota filtru vynásobí hodnotou bodu v předloze znaku a tyto výsledky se sečtou.Výsledné g x g pole vzorků je ten vyfiltrovaný znak.
Naimanova a Founierova metoda III vylepšení Jakmile je předloha rozdělena do obdélníkových částí, dají se jednoduše v cyklu procházet všechny obdélníčky předlohy a určí se přínos na intensitě s použitím filtru jako tabulky. Nepočítá se tedy hodnota pro každý bod zvlášť.
Naimanova a Founierova metoda IV
Literatura Computer Graphics: Principles and Practice, Foley, van Dam, Feiner, Hughes