Ve starších verzích LnxSpectrum Asm editoru, případně v jiných editorech / kompilerech se obrázky nebo sprity musí předem převést do binárního formátu, přesně na míru naší aplikace. Tento binární soubor se poté vloží pomocí Include nebo Incbin (podle druhu kompileru) do našeho projektu. Nevýhoda je že při každé úpravě grafiky je nutno celý převod opakovat. Tento klasický postup v LnxSpectrum funguje bez problémů.
Od verze v1.6.9b však editor v LnxSpectrum nabízí ještě jednu možnost vložení obrázků a spritů do našeho projektu, a je o mnoho pohodlnější. Do našeho projektu můžeme vložit přímo soubory JPG nebo PNG, bez nutnosti je předem nějak převádět do binárního formátu. Importovaný obrázek musí mít správný cílový rozměr v pixlech, pokud je barevný, měl by dodržovat HW omezení ZX Spectrum pro zobrazení (maximálně 2 barvy v attributu 8×8 pixlů).
Konvertor není zaměřen na co nejdokonalejší převod fotografií do ZX Formátu. Obrázek musí počítat s HW omezením jaké ZX Spectrum má. Konvertor neobsahuje žádné pomocné filtry typu dithering. Pro převody fotografií bude lépe použít nějaký specializovaný program zaměřený na tyto konverze. Konvertor v současnosti nepodporuje barvy ULA Plus, podporuje pouze barvy originálního ZX Spectrum.
Ujistěte se že máte verzi nejméně v1.6.9b.
Vytvoříme si nový prázdný Projekt. Vlevo nahoře je okno, ve kterém je zatím jediný modul main.asm. Klikneme pravým tlačítkem v tomto okně a zvolíme v menu Import (viz. obrázek). V následujicím dialogu vybereme připravený obrázek ve formátu JPG nebo PNG. Šířka obrázku musí být dělitelná 8, a pokud chceme používat i barvy, musí být dělitelná 8 i výška. Nejmenší obrázek je tedy 8×1 pixel, maximální velikost není limitována, snad jen aby se to vešlo do paměti ZX Spectrum.
Po naimportování obrázku ho uvidíme v seznamu. Pokud na něj klikneme, vykreslí se nám vpravo jeho náhled (v našem příkladě je to kost :) ).
Způsobů jak uložit obrazová data je několik druhů, například pro účely spritů do her je potřeba mít data v jiné posloupnosti za sebou, než je klasický Screenshot z videoram. Navíc někdy chceme data i s barvami, někdy jen bitmapu bez barev. V případě fontů je potřeba také jiná posloupnost dat. Záleží na konkrétní aplikaci. LnxSpectrum kompiler umí několik způsobů těchto posloupností. U každého obrázku může být posloupnost jiná. Poklepeme dvojklikem na obrázek v našem seznamu a vyskočí nám okno, kde si několik věcí můžeme přednastavit.
Okno přednastavení posloupnosti dat
Popis předvoleb:
Data type - jsou různé metody posloupnosti dat. V náhledu je posloupnost dat znázorněna graficky v levém okně.
Classic SCR - pokud je importovaný obrázek o velikosti 256×192 px, je možné ho uložit v posloupnosti dat jako klasický screenshot videoram.
Paper Darker Color - pokud je zaškrtnuto, bude tmavší barva vždy nastavena jako Paper. V opačném případě tam vždy bude světlejší barva.
Compress data - vytvořená data budou kompimovaná, a dají se v našem projektu rozbalit pomocí decompress.lib
Kompiler obrázky konvertuje jen při prvním kompilování. Při následujících kompilování se již použijí předchozí připravená data. Proto může první kompilace trvat o něco déle. Rekompilace obrázků se dá také vyvolat ručně, buď změnou druhu posloupnosti dat, nebo v seznamu souborů v menu dát „Refresh files“
Do HGFX projektů se dají vkládat přímo Indexované obrázky, s maximálně 256 barvami. Musí být předem převedené do indexových barev, s RGB obrázky nepracuje. Šířka musí být v násobcích 8. Tento Import se provádí Direktivou přímo v ASM projektu.
#bpl file.png/gif parameters
Pomocí parametrů můžete nastavit kolik planar vrstev se má z obrázku vzít, jestli se jedná o Sprity, jestli mají mít Masku, jestli každý Sprite má být zarovnán na adresu 0xNN00, průhlednost, a dalších několik věcí které si postupně probereme.
Tento parametr říká kolik planar vrstev bude použito. Je to vlastně informace o počtu barev obrázku.
| Parametr | Počet barev |
|---|---|
| p1 | 2 barvy |
| p2 | 4 barvy |
| p3 | 8 barev |
| p4 | 16 barev |
| p5 | 32 barev |
| p6 | 64 barev |
| p7 | 128 barev |
| p8 | 256 barev |
Jednotlivé bitplany se ukládají hned zasebou jeden po druhém.
Pořadí ukládaných bitplánů jeden po druhém může být od nejvyšší do nejnižší, nebo naopak. Pořadí se přehodí pomocí rev - Reverse planes parametru.
Pokud obrázek obsahuje jen jeden obrázek, není tento parametr povinný. Ale v jednom obrázku může být obrázků více, třeba jednotlivé Sprity, postavičky nebo jednotlivá písmena v obrázku s Fontem kde písmena jsou vedle sebe. V takovém případě nastavíme šířku, případně i výšku jednoho Spritu. Například když budeme mít obrázek s fontem který je ve 4 barvách, kde jsou písmena nakreslené vedle sebe. Obrázek má šířku 256×64 px, jedno písmeno má šířku 16×16 px. Je v něm tedy 16 písmen vedle sebe, ve 4 řadách. Použijeme parametry:
#bpl font.gif p2 w16 h16
font.gif je zpracovávaný obrázek, p2 = 2 plány, tedy 4 barvy. w16 h16 je šířka a výška jednoho Spritu (písmena) v pixelech.
Pokud je obrázek Sprite, a budeme chtít v HGFX s ním pohybovat přes jiné objekty, bude možná potřebat masku na vykrytí místa, kam se Sprite bude kreslit. Tento parametr Vám jej automaticky vygeneruje podle nulté indexové barvy. Získáte tím tedy další 1 bitplán, masku, která se uloží vždy jako první.
V některých projektech by se hodilo, kdyby každý Sprite vygenerovaný z jednoho obrázku byl zarovnaný tak, aby vždy začínal na 0 v nižším bajtů adresy. Tento parametr tohle zajistí.
Někdy chceme data mít v Chunky režimu, místo planárního. Chunky režim je že každý pixel je reprezentován jedním bajtem ve kterém je vždy indexová barva konkrétního pixelu. Tento režim aktivujeme tímto parametrem.
Ke správnému zobrazení obrázku potřebujeme znát jeho paletu. Tu si můžeme vyexportovat z obrázku pomocí parametru pal. V tomto případě dostaneme tolik barev, kolik jich je nadefinováno pomocí parametru pN (počet plánů) a ve formátu R,G,B. Pokud chceme paletu raději ve formátu B,G,R, použijeme parametr palBGR.
Někdy je průhlednost nastavená na jiném barvovém indexu než obvyklá 0. Tímto parametrem jí můžeme přenastavit, ale pokud se paleta opakuje pro více importovaných souborů, může to mít nečekané výsledky. Tento parametr totiž změní pořadí barev v importovaném souboru. Průhlednost používá například generátor Masky (mask).
Generovaná data můžeme do paměti uložit v komprimované formě (Lnx compress v3). Pokud chceme všechna data kompimovat do jednoho datového bloku, použijeme parametr c. Tím můžeme celý blok dat rozbalit jedním příkazem, a následně zpracovat bitmapu po bitmapě. Někdy je ale vhodnější kvůli nedostatku paměti komprimovat každou bitmapu z obrázku samostatně, použijeme tedy parametr cb. Tím můžeme rozbalit jeden bitplan, zpracovat, nasledně rozbalit další a opět zpracovat, jeden bitplan po druhém.
Paměťový prostor Z80 je bohužel omezený. Ale některé obrázky jsou v indexové formě obrovské. Například obrázek 256×192 v 256 barvách zabere 48 KB. To se jen těžko při kompilování ASM projektu někam vejde v jednom kuse. Data se musí rozřezat na menší části a kompilovat například do URAM paměti, nebo alespoň do ZX128 rozšířené paměti. K tomu slouží tento parametr. Příklad, obrázek o velikosti 48 KB budeme chtít dát do ZX128 paměti, konkrétně RAM page 1,3 a 4.
#RAMPAGE 1 org 49152 #bpl pic.gif p8 a0-16383 #RAMPAGE 3 org 49152 #bpl pic.gif p8 a16384-32767 #RAMPAGE 4 org 49152 #bpl pic.gif p8 a32768-49151
Pokud chceme ukládat větší objem dat (například obrázek 256×192 ve 256 barvách viz. aN-N), můžeme při ukládání do URAM Elementu použít jinou funkci než rozřezávat data na bloky. Kompiler umí velký blok dat uložit do URAM v jednom kuse, kde se automaticky jednotlivé části ukládají do následujících RamPages.
#ELEMENT_RAMPAGE p0+ 10 ORG 0 #bpl pic.gif p8
Tento ukázkový kód bude importovaný obrázek ukládat do URAM Elementu, od RamPage 10 a následující. Konkrétně 48 KB uloží do stránek 10 až 15. Právě „+“ u zóny (p0 = protected zone 0) říká, že pokud bude víc dat, má automaticky přejít na následující RamPage.
Kompiler obrázky konvertuje jen při prvním kompilování. Při následujících kompilování se již použijí předchozí připravená data. Proto může první kompilace trvat o něco déle. Rekompilace obrázků se dá také vyvolat ručně, buď změnou druhu posloupnosti dat, nebo v seznamu souborů v menu dát „Refresh files“