====== Vkládání obrázků, ZX jednobitové, attributy ====== 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 8x8 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. ==== Jak vložit obrázek do projektu ==== {{ :lnxspectrum:pic_imp1.jpg?nolink|}} 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 8x1 pixel, maximální velikost není limitována, snad jen aby se to vešlo do paměti ZX Spectrum. {{ :lnxspectrum:pic_imp2.jpg?nolink|}}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. {{:lnxspectrum:pic_imp3.jpg?nolink|}} //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 256x192 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 ---- {{:info.png?nolink&64 |}}//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"// ---- ======Vkládání obrázků do HGFX, indexové barvy====== Od verze emulátoru 1.9.0 se do HGFX projektů 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 s nulovým nižším bajtem v adrese, průhlednost, a dalších několik věcí které si postupně probereme. ---- ==== pN N=Planes==== 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. ---- ====rev - Reverse planes==== 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. ---- ====wN (Sprite Width), hN (Sprite Height)==== 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 256x64 px, jedno písmeno má šířku 16x16 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.// ---- ====mask==== 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í. ---- ==== fl - hfill 0 behind each sprite==== 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í. ---- ====ch - Chunky data==== 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. ---- =====Barvy, paleta===== ====pal, palBGR==== 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**. ====tN - Transparency Index==== 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**). ---- =====Ukládání generovaných dat===== ====c - Compress All, cb - Compress each BPL ==== Generovaná data můžeme do paměti uložit v komprimované formě ([[komprimace|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. ---- ====aN-N - Write block==== Paměťový prostor Z80 je bohužel omezený. Ale některé obrázky jsou v indexové formě obrovské. Například obrázek 256x192 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 ====Větší objem dat a Element URAM==== Pokud chceme ukládat větší objem dat (například obrázek 256x192 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. ---- {{:info.png?nolink&64 |}}//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"// ----