V souvislosti se získáváním souborů/dat/fotek pro tvorbu ortofoto scenérie bgl zde chci uvést seznam důležitých témat. Vše to souvisí s mým programem.
Nejdříve ohledně urychlení stahování dat (přesněji ukládání dat do PC a zpracování pomocí mého programu)
1. Pořiďte si RAM-disk
Stáhněte si SoftPerfect RAM Disk 3.4.6!
2. Používejte Mozillu Firefox a nastavte si tam omezenou velikost odkládací paměti (adresář cache2)
Ohledně omezení velikosti cache: jde o to, aby se vám zbytečně nefragmentoval systémový disk což snižuje výkon PC. Stejně tak vám může časem dojít místo na disku pokud to neomezíte a máte tam málo místa).
3. Vypněte si odkládací paměť disku (browser.cache.disk) a zapněte si ( nebo nechte zapnutou) odkládací paměť v operační paměti RAM (browser.cache.memory).
Nastavení Cache RAM Firefoxu
Ohledně přesunu cache z disku do RAM: jde o to že zápis na disk je mnohonásobně pomalejší než zápis do operační paměti. Stejně tak čtení z RAM je o dost pomalejší. Můj program budete moci využívat velmi efektivně, pokud si vše správně nakonfigurujete.
4) Najdete si ve Firebugu plugin Save Images a naučte se ho používat, hlavně se naučte nakonfigurovat regulární výrazy pro tvar vstupních linků/odkazů/zdrojů obrázků.
5.a) založte si účet na Google a přihlašte se na Google Development Console:
5.b) Aktivujte si tam službu Google Javascript API v3, v sekci APIs & Auth / APIs (je tam seznam služeb).
5.c) Získejte API klíč v sekci APIs & Auth / Credentials
5.d) Najděte si tutorial jak pracovat s Google Javascript API v3:
Google Javascript API v3 - Tutorial (Návod v angličtině) a stáhněte si odtamtud kód pro html.stránku s mapou.
Taky se podívejte na tuto stránku: Google Maps Javascript API - maximální počet zobrazení mapy na den
sobota 18. dubna 2015
pondělí 30. března 2015
Soubor task (.tsk)
V následujících dnech mám v plánu dělat parsování souboru .tsk.
Myšlenka je navržena zde (čtěte poslední sekci dole):
http://texture-edit.blogspot.cz/2015/02/zamysleni-procedura-exclude.html
Soubor task má sloužit jako definice oblasti, kterou chcete stahovat (oblastí, které chcete stahovat nebo upravovat), včetně oblastí, které z toho chcete vynechat.
Myšlenka je navržena zde (čtěte poslední sekci dole):
http://texture-edit.blogspot.cz/2015/02/zamysleni-procedura-exclude.html
Soubor task má sloužit jako definice oblasti, kterou chcete stahovat (oblastí, které chcete stahovat nebo upravovat), včetně oblastí, které z toho chcete vynechat.
sobota 7. března 2015
ramdisk
Na této stránce jsem našel seznam 12ti programů, které toto umí:
12 benchmarked programs for RAMdisk
Nyní teda hledám vhodný program.
SoftPerfect Ramdisk
Tenhle program se mi líbí. Stačí tři kliknutí a disk o velikosti až 4GB je vytvořen. Já si vytvořil na zkoušku disk o velikosti 1024 GB. Ovládání je lehké a vzhled jednoduchý.
Stáhnout ho můžete zde: SoftPerfect Ramdisk (pozor, ta stránka je záludná, je třeba kliknout na tlačítko, které je úplně dole ať nestáhnete nežádoucí program). Pokud chcete kliknout přímo na instalačku: ramdisk_setup.exe
Rychlost je velice slibná:
poznámka z praxe:
Při práci s tímto Ramdiskem jsem rozbaloval archiv zip cca 11MB 4.862 souborů a 1524 složek a když jsem to dělal v rámci jednoho RAMdisku tak se objevila neskutečně dlouhá doba na rozbalení asi hodina a dvacet minut. Proto jsem vytvořil ještě jeden RAMdisk do kterého jsem dal ten soubor na rozbalení a pak jsem to rozbaloval do toho většího RAMdisku. Trvalo to jen 15 minut, ale bylo to tou metodou že to tak dlouho trvalo. Pak překopírování na disk bylo otázkou mžiku. To jen tak abyste věděli že někdy může být lépe vytvořit zvlášť zdrojový a zvlášť cílový RAMdisk. Jo a lidi, nikdy nepoužívejte na takové věci zip, protože ve Winraru jsem to měl zabalené asi za 3 sekundy (rozbalené taksamo), rychlá komprese a přitom archiv zabírá o několik kB méně než zip.
Další Ramdisky
S programy níže jsem už nebyl tak spokojen
Hned z prvního obrázku vídíte jak pomalý je zápis na pevný disk (a čtení z něj) a z dalších obrázků vidíte jak rychlé to je pokud to provádíme jen v rámci paměti.
Zaujal mě tento program jakožto nejrychlejší Ramdisk (freeware): Bond Disc
ale jeho limit je max. 640MB prostoru ramdisku (což není zrovna moc ideální by bylo min. 1GB-2GB).
Lepším programem se zdá být DataRam ramdisk, ten nabízí 4GB v rámci freeware licence, i když nedosahuje tak velké rychlosti jako předchozí program. Tento se mi ale bohužel nepovedlo nainstalovat na Windows XP x86 (ale píšou tam že je třeba x86 nebo x86 a min. Windows server 2003).
Poznámka:
Aktuálně pracuji na zkušebním programu, který načítá hlavičku souboru bgl a zjistil jsem že tam je údaj o kompresi. Není tedy pravda, že metoda komprese je neznámá. Je však otázka jestli najdu způsob jak soubor dekomprimovat. Možná nenajdu, avšak ramdisk se bude každopádně hodit. Můžete si plugin Save images nastavit přímo tak aby vám ukládal obrázky přímo na ten disk, čímž se urychlí celá operace. Zápis na disk totiž bývá pomalejší než čtení z disku, jak můžete vidět na obrázku níže:
čím méně MB/s tím pomalejší ...
Definice zdroje s -r regex
Ve výpočetní technice se často používají regulární výrazy abyste mohli pomocí jednoho textového řetězce vyjádřit proměnný tvar řetězce, se kterým hledáte. O tom jsem už psal v souvislosti s pluginem Save images. V mém programu bude existovat možnost jak jednoduše specifikovat soubory, které chcete použít pro provedení příkazu. Argument se označuje jako -r a můžete to číst jako regex (z anglického regular expression). slovo regex zde označuje syntaxy.
Syntaxe použití:
program.exe -r regex
-r {x:..}_{y:...}_extension
-r {...}_{...}_extension
-r _{x:..}_{y:...}_extension
-r _{x:..}_{y:...}_extension
Místo tří teček si doplníte buď číslo nebo číselný rozsah. Místo extension si doplníte koncovku souboru nebo regulární výraz pro koncovku. Písmena x: a y: označují kterou osu v mřížce označuje číslo v souboru.
-r _{...}_{...}_ se překládá jako -r _{y:..}_{x:...}_
Pokud neuvedete písmeno x,y tak je výraz vyhodnocen tak, že na místě první závorky se očekává y.
Příklady použití:
-r 15_{0-2}_{3-4}*.jpg
Program bude hledat předponu 15_ a za ním číselný rozsah označující osu y. Za tímto číslem je uvedeno podtržítko a za ním číslo x. Za ním může následovat jakýkoliv textový řetězec končící koncovkou .jpg
Tečka na konci znamená že program bude hledat tečku v názvu souboru.
Obdoba příkazu nahoře:
-r 15_{y:0-2}_{x:3-4}*.jpg
Oba regulární výrazy mají vyhledat tyto soubory:
15_0_3.jpg
15_0_4.jpg
15_1_3.jpg
15_1_4.jpg
15_2_3.jpg
15_2_4.jpg
V průzkumníku Windows si můžete tyto soubory najít a uspořádat přesně tak jak to vidíte v mém výpisu. Toto je výhoda pojmenování souboru ve stylu y,x místo x,y protože v opačném případě nebudou soubory jasně uspořádány podle osy y.
Další příklady:
-r 15_{y:-2}_{x:-4}*.jpg
-r 15_{y:-2}_{-4}*.jpg
Zde jsem napsal pouze jedno číslo, avšak pozor! Nejedná se o číslo záporné. Pomlčka zde znamená, že číslo nalevo uvnitř závorky chybí! Tzn. není zadán dolní limit a proto tento výraz bude hledat tyto soubory:
15_0_0.jpg
15_0_1.jpg
15_0_2.jpg
15_0_3.jpg
15_0_4.jpg
15_1_0.jpg
15_1_1.jpg
15_1_2.jpg
15_1_3.jpg
15_1_4.jpg
15_2_0.jpg
15_2_1.jpg
15_2_2.jpg
15_2_3.jpg
15_2_4.jpg
Příklady s nevýhodným uspořádáním souborů:
-r 15_{x:2-}_{y:2-}*.jpg
Tento výraz hledá soubor začínající na 15_ a pokračující číslem vyšším než 2 na osex umístěné jako uprostřední číslo souboru a poslední číslo je y větší než dva.
-r 15_{x:2000-}_{-}*.jpg
Tento výraz hledá soubory začínající na číslo 15_ a pokračující od čísla 2000 výše pro osu x. Osa y může být jakékoliv číslo a pak následuje koncovka souboru.
Využití v praxi
V praxi se tento regulární výraz bude hodit například na vytvoření jednoho obrazu pomocí příkladu -join z menších obrazů, které zapadají do mřížky. Stejně tak by mělo být možno rozdělit soubor na více obrázků tímto způsobem. Vhodné pro nacvičování základních operací programu. Vyšší formou na rozsáhlejší operace bude příkaz -task, který se nebude omezovat pouze na dva číselné rozsahy.
Syntaxe použití:
program.exe -r regex
-r {x:..}_{y:...}_extension
-r {...}_{...}_extension
-r _{x:..}_{y:...}_extension
-r _{x:..}_{y:...}_extension
Místo tří teček si doplníte buď číslo nebo číselný rozsah. Místo extension si doplníte koncovku souboru nebo regulární výraz pro koncovku. Písmena x: a y: označují kterou osu v mřížce označuje číslo v souboru.
-r _{...}_{...}_ se překládá jako -r _{y:..}_{x:...}_
Pokud neuvedete písmeno x,y tak je výraz vyhodnocen tak, že na místě první závorky se očekává y.
Příklady použití:
-r 15_{0-2}_{3-4}*.jpg
Program bude hledat předponu 15_ a za ním číselný rozsah označující osu y. Za tímto číslem je uvedeno podtržítko a za ním číslo x. Za ním může následovat jakýkoliv textový řetězec končící koncovkou .jpg
Tečka na konci znamená že program bude hledat tečku v názvu souboru.
Obdoba příkazu nahoře:
-r 15_{y:0-2}_{x:3-4}*.jpg
Oba regulární výrazy mají vyhledat tyto soubory:
15_0_3.jpg
15_0_4.jpg
15_1_3.jpg
15_1_4.jpg
15_2_3.jpg
15_2_4.jpg
V průzkumníku Windows si můžete tyto soubory najít a uspořádat přesně tak jak to vidíte v mém výpisu. Toto je výhoda pojmenování souboru ve stylu y,x místo x,y protože v opačném případě nebudou soubory jasně uspořádány podle osy y.
Další příklady:
-r 15_{y:-2}_{x:-4}*.jpg
-r 15_{y:-2}_{-4}*.jpg
Zde jsem napsal pouze jedno číslo, avšak pozor! Nejedná se o číslo záporné. Pomlčka zde znamená, že číslo nalevo uvnitř závorky chybí! Tzn. není zadán dolní limit a proto tento výraz bude hledat tyto soubory:
15_0_0.jpg
15_0_1.jpg
15_0_2.jpg
15_0_3.jpg
15_0_4.jpg
15_1_0.jpg
15_1_1.jpg
15_1_2.jpg
15_1_3.jpg
15_1_4.jpg
15_2_0.jpg
15_2_1.jpg
15_2_2.jpg
15_2_3.jpg
15_2_4.jpg
Příklady s nevýhodným uspořádáním souborů:
-r 15_{x:2-}_{y:2-}*.jpg
Tento výraz hledá soubor začínající na 15_ a pokračující číslem vyšším než 2 na osex umístěné jako uprostřední číslo souboru a poslední číslo je y větší než dva.
-r 15_{x:2000-}_{-}*.jpg
Tento výraz hledá soubory začínající na číslo 15_ a pokračující od čísla 2000 výše pro osu x. Osa y může být jakékoliv číslo a pak následuje koncovka souboru.
Využití v praxi
V praxi se tento regulární výraz bude hodit například na vytvoření jednoho obrazu pomocí příkladu -join z menších obrazů, které zapadají do mřížky. Stejně tak by mělo být možno rozdělit soubor na více obrázků tímto způsobem. Vhodné pro nacvičování základních operací programu. Vyšší formou na rozsáhlejší operace bude příkaz -task, který se nebude omezovat pouze na dva číselné rozsahy.
neděle 1. března 2015
Práce s vrstvama a maskama
Na rozdíl od Photoshopu, když budete pracovat s vrstvama budete psát příkazy přímo do txt souboru a nebude ani moc záležet na pořadí vrstev. Photoshop funguje tak, že když nad jednu vrstvu umístíte jinou vrstvu a dáte ji nějaký blending efekt (například color) a pak do této vrstvy kreslíte, tak se barvy promítají do spodní vrstvy. Můj program ale nebude pracovat pomocí oken, takže si potřebujete uvědomit jak takové kreslení probíhá nebo jak se to dá realizovat z pohledu programátorského .
Když ve Photoshopu založíte novou vrstvu je to jako byste měli neprůsvitný raster (obraz), který zcela překrývá spodní vrstvu (obraz) ale k této vrstvě ve skutečnosti existuje nějaká maska, kterou nemůžete vidět. Co je to maska už asi víte: je to černobílý obraz. Když založíte novou vrstvu tak maska je černá a to znamená, že nic není ve vrstvě a v masce nakresleného. Když začnete kreslit do nové vrstvy, tak se současně provádí kreslení i do masky. Když uděláte první ťuknutí štětcem, nakreslíte kolečko. Toto kolečko má například hnědou barvu a nakreslí se do vrstvy. Tu vidíte. Ale do masky se nakreslí bílé kolečko. Tak program ví, že jste nakreslili nějaký tvar do obrazu. To co je černé je průsvitné a proto se vám to jeví jakoby kolem kolečka nic nebylo a proto vidíte to co je pod vrstvou.
To co se ve Photoshopu jeví jako pouhé klepnutí štětcem do nové vrstvy, se v mém programu musí udělat složitěji. Připomínám ale, že můj program není na kreslení pomocí nástrojů, ale spíše pro práci s již existujícími fotografiemi, texturami či mapkami. Takže pokud máte fotku na kterém jsou bílé objekty (čtverce, kolečka, atp.) a chcete vytvořit masku, tedy aby zbytek fotky byl průhledný. Musíte nejdříve vybrat barvy. První předpoklad je že takových fotek máte více a že všechny tvary na všech fotkách mají bílou barvu v určitém rozsahu. Musíte tedy nejdříve v nějakém programu, např. ve Photoshopu zjistit jaký barvový rozsah tento objekt či tvar obsahuje. Poté co si zapíšete minimální a maximální hodnoty pro HSV (kanály H,S,V), tyto hodnoty napíšete do txt souboru s barvama do kterého se můj program podívá.
Pak potřebujete vytvořit masky pro každou fotografii. Spustíte program s danými argumenty. Mezi argumenty bude i název toho souboru s barvama. Jakmile program najde soubor, načte vaše definice barev a podle valších argumentů vytvoří masku nebo více masek k danému souboru (ke všem souborům).
Masky se vytváří tak, že program prochází celý obraz a zjišťuje který pixel odpovídá požadavkům na vaše barvy a pak vytváří nový obraz, tj. černobílou masku. Měly by existovat dva typy mask. Jednobitová a osmibitová.
Osmibitová maska (BW 8)
To je obyčejná maska, kde jeden byte může obsahovat 256 hodnot od 0 až po 255, a tudíž kromě černé a bílé může obsahovat i přechody mezi barvama. Technicky vzato program s takovou maskou bude pracovat pomaleji než s jednobitovou maskou. Masku je nejlépe uložit do formátu PNG.
Jednobitová maska (BW 1)
Jednobitová maska obsahuje pouze černou a bílou, jsou to dvě hodnoty. Do jednoho bytu se vleze 128 pixelů. Z toho vyplývá, že obraz masky může být 128x menší než u 8-bit masky. Z programátorského hlediska se s 1-bitovýma maskama pracuje těžko, ale výsledek by měl být velmi rychlý přístup (hlavně pro čtení) k masce. Zpracovávání obrazů které obsahují 1-bitové masky by pak probíhalo mnohonásobně rychleji než u 8-bitových masek (v nejlepším případě 128x rychleji). Jednoduše proto, že při porovnávání mezi maskou a fotografií se čte z masky po 128 pixelech, ne po jednom pixelu. Čím více černé v masce je, tím rychleji porovnávání probíhá. Protože v případě černé masky se neprovádí žádné změny do cílové fotografie, pak je i zpracování úkolu mnohem rychlejší.
Jakmile jsou masky vytvořeny, můžete vytvořit nový příkaz a soubor pro práci s vrstvami, kde si nadefinujete co dělat, jaká maska náleží které vrstvě. Pak spustíte příkaz, který bude obsahovat definici zdrojů a masek. To celé se pak provede a měly byste dostat podobný efekt jako ve Photoshopu.
Samozřejmě to celé zabere spoustu času, včetně pochopení jak program funguje, takže se nevyplatí dělat to kvůli 10 ti fotografiím. Ale kvůli 10.000 ba 100.000 fotografiím se to už vyplatí.
Když ve Photoshopu založíte novou vrstvu je to jako byste měli neprůsvitný raster (obraz), který zcela překrývá spodní vrstvu (obraz) ale k této vrstvě ve skutečnosti existuje nějaká maska, kterou nemůžete vidět. Co je to maska už asi víte: je to černobílý obraz. Když založíte novou vrstvu tak maska je černá a to znamená, že nic není ve vrstvě a v masce nakresleného. Když začnete kreslit do nové vrstvy, tak se současně provádí kreslení i do masky. Když uděláte první ťuknutí štětcem, nakreslíte kolečko. Toto kolečko má například hnědou barvu a nakreslí se do vrstvy. Tu vidíte. Ale do masky se nakreslí bílé kolečko. Tak program ví, že jste nakreslili nějaký tvar do obrazu. To co je černé je průsvitné a proto se vám to jeví jakoby kolem kolečka nic nebylo a proto vidíte to co je pod vrstvou.
To co se ve Photoshopu jeví jako pouhé klepnutí štětcem do nové vrstvy, se v mém programu musí udělat složitěji. Připomínám ale, že můj program není na kreslení pomocí nástrojů, ale spíše pro práci s již existujícími fotografiemi, texturami či mapkami. Takže pokud máte fotku na kterém jsou bílé objekty (čtverce, kolečka, atp.) a chcete vytvořit masku, tedy aby zbytek fotky byl průhledný. Musíte nejdříve vybrat barvy. První předpoklad je že takových fotek máte více a že všechny tvary na všech fotkách mají bílou barvu v určitém rozsahu. Musíte tedy nejdříve v nějakém programu, např. ve Photoshopu zjistit jaký barvový rozsah tento objekt či tvar obsahuje. Poté co si zapíšete minimální a maximální hodnoty pro HSV (kanály H,S,V), tyto hodnoty napíšete do txt souboru s barvama do kterého se můj program podívá.
Pak potřebujete vytvořit masky pro každou fotografii. Spustíte program s danými argumenty. Mezi argumenty bude i název toho souboru s barvama. Jakmile program najde soubor, načte vaše definice barev a podle valších argumentů vytvoří masku nebo více masek k danému souboru (ke všem souborům).
Masky se vytváří tak, že program prochází celý obraz a zjišťuje který pixel odpovídá požadavkům na vaše barvy a pak vytváří nový obraz, tj. černobílou masku. Měly by existovat dva typy mask. Jednobitová a osmibitová.
Osmibitová maska (BW 8)
To je obyčejná maska, kde jeden byte může obsahovat 256 hodnot od 0 až po 255, a tudíž kromě černé a bílé může obsahovat i přechody mezi barvama. Technicky vzato program s takovou maskou bude pracovat pomaleji než s jednobitovou maskou. Masku je nejlépe uložit do formátu PNG.
Jednobitová maska (BW 1)
Jednobitová maska obsahuje pouze černou a bílou, jsou to dvě hodnoty. Do jednoho bytu se vleze 128 pixelů. Z toho vyplývá, že obraz masky může být 128x menší než u 8-bit masky. Z programátorského hlediska se s 1-bitovýma maskama pracuje těžko, ale výsledek by měl být velmi rychlý přístup (hlavně pro čtení) k masce. Zpracovávání obrazů které obsahují 1-bitové masky by pak probíhalo mnohonásobně rychleji než u 8-bitových masek (v nejlepším případě 128x rychleji). Jednoduše proto, že při porovnávání mezi maskou a fotografií se čte z masky po 128 pixelech, ne po jednom pixelu. Čím více černé v masce je, tím rychleji porovnávání probíhá. Protože v případě černé masky se neprovádí žádné změny do cílové fotografie, pak je i zpracování úkolu mnohem rychlejší.
Jakmile jsou masky vytvořeny, můžete vytvořit nový příkaz a soubor pro práci s vrstvami, kde si nadefinujete co dělat, jaká maska náleží které vrstvě. Pak spustíte příkaz, který bude obsahovat definici zdrojů a masek. To celé se pak provede a měly byste dostat podobný efekt jako ve Photoshopu.
Samozřejmě to celé zabere spoustu času, včetně pochopení jak program funguje, takže se nevyplatí dělat to kvůli 10 ti fotografiím. Ale kvůli 10.000 ba 100.000 fotografiím se to už vyplatí.
sobota 28. února 2015
Zdroje dat
Důležitá poznámka k tomu jak funguje importování či otvírání zdrojů dat, které mají být upraveny.
Ačkoliv lze v příkazovém řádku specifikovat zdroje dat, které budou použity (a spekuluji o možnosti specifikovat to taky v souboru s vrstvami), jelikož program slouží k hromadnému zpracování souborů, nepředpokládá se že budete zadávat zdroje souborů po jejich jednotlivých názvech. Program bude očekávat regulární výraz, kterým definujete číselný rozsah souboru. Nic nebrání tomu abyste rozdělili soubory do adresářů. takže i když budou mít soubory stejný název, budou v nich odlišné data. Stejné číslo souboru označuje stejnou oblast, ale v jiném zobrazení. Například masky chcete mít v odlišném barevném formátu a proto můžete zvolit jako název souboru číslo.png, kdežto pro hlavní fotografii na které chcete pracovat soubor číslo.jpg. Nejefektivnější ale bude data naimportovat přímo do databáze a pak už jen pracovat s konkrétní databází - říct programu z které databáze brát data za konkrétním účelem.
Ačkoliv lze v příkazovém řádku specifikovat zdroje dat, které budou použity (a spekuluji o možnosti specifikovat to taky v souboru s vrstvami), jelikož program slouží k hromadnému zpracování souborů, nepředpokládá se že budete zadávat zdroje souborů po jejich jednotlivých názvech. Program bude očekávat regulární výraz, kterým definujete číselný rozsah souboru. Nic nebrání tomu abyste rozdělili soubory do adresářů. takže i když budou mít soubory stejný název, budou v nich odlišné data. Stejné číslo souboru označuje stejnou oblast, ale v jiném zobrazení. Například masky chcete mít v odlišném barevném formátu a proto můžete zvolit jako název souboru číslo.png, kdežto pro hlavní fotografii na které chcete pracovat soubor číslo.jpg. Nejefektivnější ale bude data naimportovat přímo do databáze a pak už jen pracovat s konkrétní databází - říct programu z které databáze brát data za konkrétním účelem.
pátek 27. února 2015
Práce s vrstvama
Soubor bude mít koncovku .lay jako layers (vrstvy). Komentáře v souboru se budou dělat pomocí
# Komentář... Na každý řádek uvedete jednu vrstvu nebo jednu akci.
Budou zde dva nové termíny: paměť a pointer (ukazatel na paměť). První co do souboru napíšeme je počet pointerů se kterými chceme pracovat (počet vrstev, počet pamětí, které budeme chtít přidělit).
Význam zavináče @
Pamatujte: zavináč je prvním znakem v celém souboru, píše se na první řádek a slouží pro optimalizaci rychlosti načítání souboru s vrstvami. Je povinný.
Zavináč předchází číslo, které slouží k několika účelům. Mělo by orientačně označovat maximální počet vrstev, mělo by být větší než počet skupin a v případě, že soubor obsahuje hodně příkazů pro práci s vrstvami je lepší toto číslo zvětšit, takže může být klidně větší než počet vrstev. Toto číslo má vliv na dynamické přiřazování paměti během procesu parsování souboru vrstev. Čím větší číslo uvedete, tím větší bude blok přidělené paměti (je zbytečně zvětšovat číslo k dosažené enormní velikosti paměti, kterou byste nevyužili). Jako příklad uvedu @4 . Tímto se každý 4 příkaz znovu alokuje paměť. Pokud příkazů v souboru je 100, můžeme toto číslo klidně zvětšit třeba na 25, 35,50 apod. Pokud máme příkazů 20, postačí nám 5 nebo 6 případně rovnou 20. Během parsování souboru totiž program předen nevím kolik příkazů tam je, to víte jen vy. A aby bylo dosaženo co největší efektivity a rychlosti při parsování souboru, nastavujete si toto číslo sami.
@5 #vytvoří paměť pro 5 vrstev a program bude každých 5 příkazů zvětšovat znovu přidělovat paměť..
Výstupní vrstva $
Výstupní vrstva následuje za znakem dolaru a nachází se na stejném řádku jako @. Za dolarem uvedete číslo vrstvy, kterou chcete použít jako celkový výstup. Výstupem myslím výsledek všech operací, které se provedou na základě instrukcí v souboru s vrstvami. Ačkoliv cílovou vrstvu program použije až jako úplně poslední akci, je dobré to napsat hned na začátku pro vlastní přehlednost. Proto dolar musí být na stejném řádku jako zavináč.
Vytváření vrstev *
*2:RGB # Hvězdička označuje vrstvu, kterou chceme založit a přidělit ji paměť. Bez přidělené paměti nelze začít pracovat, program by vypsal chybu. Za hvězdičkou uvedeme číslo vrstvy. Nemusí být automaticky 2. Uvědomte si, že program, bude pracovat z příkazového řádku. Napíšete nějaký příkaz ve kterém bude argument např. -lay reduce_shadows.lay , tím pádem se k příkazům z příkazového řádku přidají příkazy z toho souboru který "zrovna teď" píšu. Je logické, že při práci z vrstvama chceme také zdrojový soubor označit jako vrstvu. Například *1 -source:rgb file.jpg -rgb2hsv by mohlo otevřít soubor file.jpg v režimu RGB a následně ho převést na režim hsv, ale předtím jsem dal příkaz na vytvoření paměti pro danou vrstvu, správněji řečeno příkaz na vytvoření pointeru, který po otevření souboru ukazuje na ten soubor načtený v paměti. Takže v souboru lay teď zakládám pointer číslo 2 dvojtečkou mu přiděluji paměť o rozsahu tří kanálů. Pozn. Jeden kanál zabírá jeden byte, tedy 8 bitů, takže se jedná o 32 bitový soubor. Pokud by soubor obsahoval ještě alfa kanál (masku) tak by ho nešlo načíst do paměti. V takovém případě byste museli napsat *2:RGBA
Poté co máte paměť přidělenou označíte s kterou vrstvou chcete pracovat.
*2:RGB 50% # číslo se znakem procenta označuje míru ne/průhlednosti vrstvy. Lze to použít pouze u "horní" vrstvy, která má být součástí efektu kde dochází ke slučování nebo míchání dvou vrstev. Známe to z Photoshopu: Když spodní vrstva má 100% neprůhlednost, ale vrstva nad ní má 50% tak výsledkem je, že se vrstva z 50 procent promítne do spodní vrstvy. Výsledná či-li cílová vrstva je ta ovlivněná vrstva která je dole. Je to jako svítit dvěma barevnými světly přes sebe, takže vytvoří odlišný odstín.
*2:RGB 100% &3 # Ampersand na konci řádku, který začíná hvězdičkou má odlišný význam než řádek, který začíná ampersandem. Význam je takový: Ampersandem odkazujeme na černobílou masku, kterou chceme připojit k této vrstvě. Říkáme tak, že se jedná o horní vrstvu, protože pixely se budou promítat do spodní vrstvy v závislosti na masce. Tam kde má maska černé pixely se nic nepromítne, tam kde má pixely bílé se nepromítne nic.
*3:BW ... # Vytvoření černobílé masky, místo teček bude třeba uvést zdroj, což bude záviset na situaci. U masky nemá smysl uvádět procenta průhlednosti protože jde o masku. U masky pravděpodobně nebudete chtít dělat žádné efekty, snad kromě efektu darken (ztmavení) nebo lighten (zesvětlení) v případě, že byste chtěli sečíst nebo odečíst bílé pixely s jinou maskou. Maska je určena hlavně k tomu, abyste na ní mohli odkázat pomocí ampersandu & v jiné vrstvě a dosáhnout tak připojení masky v vrstvě.
*3:BW 1 # Vytvoření jednobitové (černobílé masky). Maska se bude skládat pouze z bílé a černé barvy, žádné odstíny mezi tím. Taková maska umožňuje výrazně rychlejší porovnávání pixelů mezi cílovou vrstvou a maskou (mělo by jít zhruba o 128x rychlejší proces, ale závisí to na tom kolik černých pixelů obsahuje maska, čím více tím rychlejší). Uložení masky v tomto tvaru přímo do souboru by mělo v budoucnu poskytnout výhodu: do jednoho alpha kanálu se vám vleze více masek (snad až 128). Pro tento případ by musel existovat soubor masek popisující pořadí masek a co která maska obsahuje.
*3:BW 8 # Standardní osmibitová maska neboli osmibitový (černobílý) kanál obsahuje 256 barev - odstínů bílé, černé a šedé. Porovnávání pixelů mezi maskou a vrstvou bude probíhat standardní rychlostí.
Příkazy pro vrstvy &
&2:RGB # RGB označuje kanály, které chcete ovlivnit příkazem.V tomto případě všechny kanály.
&2:H # H označuje kanál, který chcete ovlivnit příkazem. V tomto případě pouze odstín..
&2:S # H označuje kanál, který chcete ovlivnit příkazem. V tomto případě pouze saturaci..
&2:V # V označuje kanál, který chcete ovlivnit příkazem. V tomto případě světlost barvy.
&2:RGB # a dále napíšete příkazy a argumenty. Ampersand & zde říká že odkazuju na pointer vrstvy dva čili že tyto příkazy budou platit pro vrstvu dva. Celý příkaz se musí vejít na jeden řádek.
Teď nebudu do detailu rozebírat strukturu argumentů, na to je ještě hodně času. Při práci s vrstvama připravím nějaké ukázky jak to celé funguje. Vše je zatím teprve ve fázi návrhu. Zápis instrukcí do souboru mi přijde jako jediný způsob jak takové množství informací srozumitelně a přehledně zapsat.
Odstranění vrstvy !
Důležité: je třeba pamatovat na to, že máme omezené množství paměti a proto pokud některou vrstvu či masku už nebudeme potřebovat tak ji odstraníme z paměti příkazem release ... !2:release ...případně můžeme použít slovo free. Důležité: vykřičník je prvním znakem na řádku, za ním následuje číslo vrstvy, která má být odstraněna. free má tentýž význam jako release.
Cílová vrstva
Taktéž důležité je vědět, že po na konci instrukcí musí zůstat přidělená jedna vrstva (jeden pointer) a to vrstva výstupní jinak by nebyl vrácen řádný výsledek. Zřejmě na toto bude na začátku další značka na označení výstupního pointeru (výstupní vrstvy). Možná vykřičník by mohl splňovat takovou roli. Po zpracování všech instrukcí bude hotový obraz obrazně řečeno předán do příkazového řádku, kde budeme pokračovat ve zpracování. Byla by možná vyjímka pro to, kdy by výstupem souboru .lay nebyl žádný obraz předávaný dál programu a to v případě, že se prostě rozhodneme obraz rovnou uložit něco jako: &2:save myfile.jpg
Argumenty
&2: # a dále napíšete příkazy a argumenty. Ampersand & zde říká že odkazuju na pointer vrstvy dva
Syntaxe příkazů vrstvy:
-a:action_name (arg1;arg2) -e:effect_name(arg1;arg2)
-a: označuje akci. aktuální akce jsou: threshold, levels, copy, resize
-f: označuje efekty typu filtr: blur, sharpen, noise, embos, aj.
-e označuje blending efekt. aktuální efekty jsou: disolve, darken, lighten, multiply, color_burn, linear_burn, linear_light, screen, color_dodge, linear_dodge, overlay, soft_light, hard_light, vivid_light, pin_light, hard_mix, hue, color, saturation, luminosity
názvy odpovídají názvům blending efektů Photoshopu.
Argumenty se píšou do kulatých závorek a oddělují středníkem.
Později upřesním přesný seznam názvů akcí a efektů.
Příklad:
&2:H -f:blur (5,4)
Měl by provést rozmazání odstínů
&2:HV -f:blur (5,4)
Měl by provést rozmazání odstínů a světlosti
Pozn: zmíněné efekty ještě nejsou funkční
Důležité: Pečlivě si prohlédněte povinné mezery mezi slovy. Tyto mezery programu umožňují snadnější rozparsování argumentů řádku. Pokud vynecháte např. mezeru mezi názvem akce (blur) a argumenty (5,4) tak program nebude moci najít akci s názvem "blur(5,4)". Místo mezery můžete použít taky tabulátor.
Novinka 1 - zásobníky:
Zatímco se mi zdá, že @ na začátku souboru, který označuje počet souborů, nebude třeba, vymyslel jsem novinku. Zapomněl jsem totiž zmínit, že na provedení "křivek" (korelace barev v režimu CMYK pomocí křivky, tzv. "Cubic Splines" ) bude třeba tzv. CMYK buffer (CMYK zásobník). CMYK zásobník je prostor v paměti vyhrazený obrazu v režimu CMYK. Není to to samé jako vrstva či obraz v režimu CMYK, protože můžete mít vrstvu v režimu RGB nebo HSV, ale CMYK zásobník může být zapnutý. Je to kopie obrazu, převedená do frmátu CMYK. Tuto kopii někdy potřebuji k provedení křivek. Samozřejmě by šli provádět i na vrstvě v jiném režimu, ale CMYK se mi zdá jako nejvhodnější kanál pro korelaci barev. Abyste nemuseli pokaždé obraz převádět do nové vrstvy, mohu vytvořit CMYK buffer automaticky při vytvoření každé vrstvy anebo na požadavek.
Moje aktuální představa tedy je, že na prvním řádku si řeknete jestli chcete mít CMYK zásobník zapnutý:
@100 +CMYK # Automaticky vytvoří CMYK zásobník pro každou vrstvu (vrstvy budou zabírat více paměti)
nebo
@100 -CMYK # Zásobníky se nebudou automaticky vytvářet a tím ušetříte paměť
Standardně by byl CMYK zásobník vypnutý
Další možnost jak aktivovat CMYK zásobník pro konkrétní vrstvu:
*2:RGB 100% &3 +CMYK # Vytvořit neprůhlednou vrstvu RGB se zásobníkem CMYK a připojí masku číslo 3 ... pořadí argumentů: není úplně jasné jestli bude poslední CMYK nebo &3
Pravděpodobná možnost odstranění zásobníku CMYK:
&2:RGB -CMYK # RGB by nemělo být povinné
Další možnost jak přepnout standardní chování mezi vrstvama:
-CMYK
nebo
+CMYK
Jakožto samostatný příkaz na novém řádku.
V těchto dnech dodělávám parsování souboru s vrstvami, takže se to brzo ujasní.
Pozn. nově podporuji i buffer HSV, takže to co jsem psal výše platí stejně i o HSV. Můžete mít obraz v RGB nebo CMYK a vytvořit si k němu zásobník HSV pokud chcete korigovat křivky odstínu, saturace nebo světla na fotografiích.
Novinka 2 - skupiny:
[1] # Označení skupiny vrstev
[2] # Označení skupiny vrstev
Photoshop umožňuje třídit vrstevy do skupin, které pak můžete např. přesouvat, vypnout nebo změnit jejich viditelnost. Jelikož můj program funguje trochu jinak a jednodušeni, vrstvy není možné přesouvat nebo vypínat jejich viditelnost. K čemu se ale dají vrstvy využít je že s nimi provedete hromadně nějakou akci, zvlášť a dodatečně. Tuto možnost chci nechat otevřenou, takže zabuduju možnost vytvořit skupinu tak, když na nový řádek do hranatých závorek napíšete číslo skupiny. Je zde ponechána možnost, že byste celou skupinu vrstev mohli na chvíli vypnout a pak ji zase zapnout, podobně jako ve Photoshopu.
1) @100 # Počet skupin nemůže být vyšší než počet vrstev.
2) Chcete-li deaktivovat (ignorovat) ty vrstvy, které jsou pod danou skupinou, pak stačí napsat:
[!3] Skupina vrstev ve skupině s číslem 3 bude deaktivována (počínaje tímto řádkem, až do další skupiny
3) Stačí napsat jeden vykřičník. Celková délka čísla skupiny uvnitř závorky nesmí být delší než 3 číslice, ale maximálně 2 číslice pokud použijete vykřičník.
4) číslo které napíšete do hranatých závorek se převádí na typ integer takže 001, 01 a 1 jsou jedno a totéž.
Novinka 3 - @:
Význam @ na prvním řádku souboru se změnil. Zavináč bude označovat nejen maximální počet vrstev - maximální číslo vrstvy (to ani tak nehraje roli, protože vrstvy počítám dynamicky), ale maximální počet skupin (maximální číslo!). Počet skupin nemůže být vyšší než počet vrstev (logické).
# Komentář... Na každý řádek uvedete jednu vrstvu nebo jednu akci.
Budou zde dva nové termíny: paměť a pointer (ukazatel na paměť). První co do souboru napíšeme je počet pointerů se kterými chceme pracovat (počet vrstev, počet pamětí, které budeme chtít přidělit).
Význam zavináče @
Pamatujte: zavináč je prvním znakem v celém souboru, píše se na první řádek a slouží pro optimalizaci rychlosti načítání souboru s vrstvami. Je povinný.
Zavináč předchází číslo, které slouží k několika účelům. Mělo by orientačně označovat maximální počet vrstev, mělo by být větší než počet skupin a v případě, že soubor obsahuje hodně příkazů pro práci s vrstvami je lepší toto číslo zvětšit, takže může být klidně větší než počet vrstev. Toto číslo má vliv na dynamické přiřazování paměti během procesu parsování souboru vrstev. Čím větší číslo uvedete, tím větší bude blok přidělené paměti (je zbytečně zvětšovat číslo k dosažené enormní velikosti paměti, kterou byste nevyužili). Jako příklad uvedu @4 . Tímto se každý 4 příkaz znovu alokuje paměť. Pokud příkazů v souboru je 100, můžeme toto číslo klidně zvětšit třeba na 25, 35,50 apod. Pokud máme příkazů 20, postačí nám 5 nebo 6 případně rovnou 20. Během parsování souboru totiž program předen nevím kolik příkazů tam je, to víte jen vy. A aby bylo dosaženo co největší efektivity a rychlosti při parsování souboru, nastavujete si toto číslo sami.
@5 #vytvoří paměť pro 5 vrstev a program bude každých 5 příkazů zvětšovat znovu přidělovat paměť..
Výstupní vrstva $
Výstupní vrstva následuje za znakem dolaru a nachází se na stejném řádku jako @. Za dolarem uvedete číslo vrstvy, kterou chcete použít jako celkový výstup. Výstupem myslím výsledek všech operací, které se provedou na základě instrukcí v souboru s vrstvami. Ačkoliv cílovou vrstvu program použije až jako úplně poslední akci, je dobré to napsat hned na začátku pro vlastní přehlednost. Proto dolar musí být na stejném řádku jako zavináč.
Vytváření vrstev *
*2:RGB # Hvězdička označuje vrstvu, kterou chceme založit a přidělit ji paměť. Bez přidělené paměti nelze začít pracovat, program by vypsal chybu. Za hvězdičkou uvedeme číslo vrstvy. Nemusí být automaticky 2. Uvědomte si, že program, bude pracovat z příkazového řádku. Napíšete nějaký příkaz ve kterém bude argument např. -lay reduce_shadows.lay , tím pádem se k příkazům z příkazového řádku přidají příkazy z toho souboru který "zrovna teď" píšu. Je logické, že při práci z vrstvama chceme také zdrojový soubor označit jako vrstvu. Například *1 -source:rgb file.jpg -rgb2hsv by mohlo otevřít soubor file.jpg v režimu RGB a následně ho převést na režim hsv, ale předtím jsem dal příkaz na vytvoření paměti pro danou vrstvu, správněji řečeno příkaz na vytvoření pointeru, který po otevření souboru ukazuje na ten soubor načtený v paměti. Takže v souboru lay teď zakládám pointer číslo 2 dvojtečkou mu přiděluji paměť o rozsahu tří kanálů. Pozn. Jeden kanál zabírá jeden byte, tedy 8 bitů, takže se jedná o 32 bitový soubor. Pokud by soubor obsahoval ještě alfa kanál (masku) tak by ho nešlo načíst do paměti. V takovém případě byste museli napsat *2:RGBA
Poté co máte paměť přidělenou označíte s kterou vrstvou chcete pracovat.
*2:RGB 50% # číslo se znakem procenta označuje míru ne/průhlednosti vrstvy. Lze to použít pouze u "horní" vrstvy, která má být součástí efektu kde dochází ke slučování nebo míchání dvou vrstev. Známe to z Photoshopu: Když spodní vrstva má 100% neprůhlednost, ale vrstva nad ní má 50% tak výsledkem je, že se vrstva z 50 procent promítne do spodní vrstvy. Výsledná či-li cílová vrstva je ta ovlivněná vrstva která je dole. Je to jako svítit dvěma barevnými světly přes sebe, takže vytvoří odlišný odstín.
*2:RGB 100% &3 # Ampersand na konci řádku, který začíná hvězdičkou má odlišný význam než řádek, který začíná ampersandem. Význam je takový: Ampersandem odkazujeme na černobílou masku, kterou chceme připojit k této vrstvě. Říkáme tak, že se jedná o horní vrstvu, protože pixely se budou promítat do spodní vrstvy v závislosti na masce. Tam kde má maska černé pixely se nic nepromítne, tam kde má pixely bílé se nepromítne nic.
*3:BW ... # Vytvoření černobílé masky, místo teček bude třeba uvést zdroj, což bude záviset na situaci. U masky nemá smysl uvádět procenta průhlednosti protože jde o masku. U masky pravděpodobně nebudete chtít dělat žádné efekty, snad kromě efektu darken (ztmavení) nebo lighten (zesvětlení) v případě, že byste chtěli sečíst nebo odečíst bílé pixely s jinou maskou. Maska je určena hlavně k tomu, abyste na ní mohli odkázat pomocí ampersandu & v jiné vrstvě a dosáhnout tak připojení masky v vrstvě.
*3:BW 1 # Vytvoření jednobitové (černobílé masky). Maska se bude skládat pouze z bílé a černé barvy, žádné odstíny mezi tím. Taková maska umožňuje výrazně rychlejší porovnávání pixelů mezi cílovou vrstvou a maskou (mělo by jít zhruba o 128x rychlejší proces, ale závisí to na tom kolik černých pixelů obsahuje maska, čím více tím rychlejší). Uložení masky v tomto tvaru přímo do souboru by mělo v budoucnu poskytnout výhodu: do jednoho alpha kanálu se vám vleze více masek (snad až 128). Pro tento případ by musel existovat soubor masek popisující pořadí masek a co která maska obsahuje.
*3:BW 8 # Standardní osmibitová maska neboli osmibitový (černobílý) kanál obsahuje 256 barev - odstínů bílé, černé a šedé. Porovnávání pixelů mezi maskou a vrstvou bude probíhat standardní rychlostí.
Příkazy pro vrstvy &
&2:RGB # RGB označuje kanály, které chcete ovlivnit příkazem.V tomto případě všechny kanály.
&2:H # H označuje kanál, který chcete ovlivnit příkazem. V tomto případě pouze odstín..
&2:S # H označuje kanál, který chcete ovlivnit příkazem. V tomto případě pouze saturaci..
&2:V # V označuje kanál, který chcete ovlivnit příkazem. V tomto případě světlost barvy.
&2:RGB # a dále napíšete příkazy a argumenty. Ampersand & zde říká že odkazuju na pointer vrstvy dva čili že tyto příkazy budou platit pro vrstvu dva. Celý příkaz se musí vejít na jeden řádek.
Teď nebudu do detailu rozebírat strukturu argumentů, na to je ještě hodně času. Při práci s vrstvama připravím nějaké ukázky jak to celé funguje. Vše je zatím teprve ve fázi návrhu. Zápis instrukcí do souboru mi přijde jako jediný způsob jak takové množství informací srozumitelně a přehledně zapsat.
Odstranění vrstvy !
Důležité: je třeba pamatovat na to, že máme omezené množství paměti a proto pokud některou vrstvu či masku už nebudeme potřebovat tak ji odstraníme z paměti příkazem release ... !2:release ...případně můžeme použít slovo free. Důležité: vykřičník je prvním znakem na řádku, za ním následuje číslo vrstvy, která má být odstraněna. free má tentýž význam jako release.
Cílová vrstva
Taktéž důležité je vědět, že po na konci instrukcí musí zůstat přidělená jedna vrstva (jeden pointer) a to vrstva výstupní jinak by nebyl vrácen řádný výsledek. Zřejmě na toto bude na začátku další značka na označení výstupního pointeru (výstupní vrstvy). Možná vykřičník by mohl splňovat takovou roli. Po zpracování všech instrukcí bude hotový obraz obrazně řečeno předán do příkazového řádku, kde budeme pokračovat ve zpracování. Byla by možná vyjímka pro to, kdy by výstupem souboru .lay nebyl žádný obraz předávaný dál programu a to v případě, že se prostě rozhodneme obraz rovnou uložit něco jako: &2:save myfile.jpg
Argumenty
&2: # a dále napíšete příkazy a argumenty. Ampersand & zde říká že odkazuju na pointer vrstvy dva
Syntaxe příkazů vrstvy:
-a:action_name (arg1;arg2) -e:effect_name(arg1;arg2)
-a: označuje akci. aktuální akce jsou: threshold, levels, copy, resize
-f: označuje efekty typu filtr: blur, sharpen, noise, embos, aj.
-e označuje blending efekt. aktuální efekty jsou: disolve, darken, lighten, multiply, color_burn, linear_burn, linear_light, screen, color_dodge, linear_dodge, overlay, soft_light, hard_light, vivid_light, pin_light, hard_mix, hue, color, saturation, luminosity
názvy odpovídají názvům blending efektů Photoshopu.
Argumenty se píšou do kulatých závorek a oddělují středníkem.
Později upřesním přesný seznam názvů akcí a efektů.
Příklad:
&2:H -f:blur (5,4)
Měl by provést rozmazání odstínů
&2:HV -f:blur (5,4)
Měl by provést rozmazání odstínů a světlosti
Pozn: zmíněné efekty ještě nejsou funkční
Důležité: Pečlivě si prohlédněte povinné mezery mezi slovy. Tyto mezery programu umožňují snadnější rozparsování argumentů řádku. Pokud vynecháte např. mezeru mezi názvem akce (blur) a argumenty (5,4) tak program nebude moci najít akci s názvem "blur(5,4)". Místo mezery můžete použít taky tabulátor.
Novinka 1 - zásobníky:
Zatímco se mi zdá, že @ na začátku souboru, který označuje počet souborů, nebude třeba, vymyslel jsem novinku. Zapomněl jsem totiž zmínit, že na provedení "křivek" (korelace barev v režimu CMYK pomocí křivky, tzv. "Cubic Splines" ) bude třeba tzv. CMYK buffer (CMYK zásobník). CMYK zásobník je prostor v paměti vyhrazený obrazu v režimu CMYK. Není to to samé jako vrstva či obraz v režimu CMYK, protože můžete mít vrstvu v režimu RGB nebo HSV, ale CMYK zásobník může být zapnutý. Je to kopie obrazu, převedená do frmátu CMYK. Tuto kopii někdy potřebuji k provedení křivek. Samozřejmě by šli provádět i na vrstvě v jiném režimu, ale CMYK se mi zdá jako nejvhodnější kanál pro korelaci barev. Abyste nemuseli pokaždé obraz převádět do nové vrstvy, mohu vytvořit CMYK buffer automaticky při vytvoření každé vrstvy anebo na požadavek.
Moje aktuální představa tedy je, že na prvním řádku si řeknete jestli chcete mít CMYK zásobník zapnutý:
@100 +CMYK # Automaticky vytvoří CMYK zásobník pro každou vrstvu (vrstvy budou zabírat více paměti)
nebo
@100 -CMYK # Zásobníky se nebudou automaticky vytvářet a tím ušetříte paměť
Standardně by byl CMYK zásobník vypnutý
Další možnost jak aktivovat CMYK zásobník pro konkrétní vrstvu:
*2:RGB 100% &3 +CMYK # Vytvořit neprůhlednou vrstvu RGB se zásobníkem CMYK a připojí masku číslo 3 ... pořadí argumentů: není úplně jasné jestli bude poslední CMYK nebo &3
Pravděpodobná možnost odstranění zásobníku CMYK:
&2:RGB -CMYK # RGB by nemělo být povinné
Další možnost jak přepnout standardní chování mezi vrstvama:
-CMYK
nebo
+CMYK
Jakožto samostatný příkaz na novém řádku.
V těchto dnech dodělávám parsování souboru s vrstvami, takže se to brzo ujasní.
Pozn. nově podporuji i buffer HSV, takže to co jsem psal výše platí stejně i o HSV. Můžete mít obraz v RGB nebo CMYK a vytvořit si k němu zásobník HSV pokud chcete korigovat křivky odstínu, saturace nebo světla na fotografiích.
Novinka 2 - skupiny:
[1] # Označení skupiny vrstev
[2] # Označení skupiny vrstev
Photoshop umožňuje třídit vrstevy do skupin, které pak můžete např. přesouvat, vypnout nebo změnit jejich viditelnost. Jelikož můj program funguje trochu jinak a jednodušeni, vrstvy není možné přesouvat nebo vypínat jejich viditelnost. K čemu se ale dají vrstvy využít je že s nimi provedete hromadně nějakou akci, zvlášť a dodatečně. Tuto možnost chci nechat otevřenou, takže zabuduju možnost vytvořit skupinu tak, když na nový řádek do hranatých závorek napíšete číslo skupiny. Je zde ponechána možnost, že byste celou skupinu vrstev mohli na chvíli vypnout a pak ji zase zapnout, podobně jako ve Photoshopu.
1) @100 # Počet skupin nemůže být vyšší než počet vrstev.
2) Chcete-li deaktivovat (ignorovat) ty vrstvy, které jsou pod danou skupinou, pak stačí napsat:
[!3] Skupina vrstev ve skupině s číslem 3 bude deaktivována (počínaje tímto řádkem, až do další skupiny
3) Stačí napsat jeden vykřičník. Celková délka čísla skupiny uvnitř závorky nesmí být delší než 3 číslice, ale maximálně 2 číslice pokud použijete vykřičník.
4) číslo které napíšete do hranatých závorek se převádí na typ integer takže 001, 01 a 1 jsou jedno a totéž.
Novinka 3 - @:
Význam @ na prvním řádku souboru se změnil. Zavináč bude označovat nejen maximální počet vrstev - maximální číslo vrstvy (to ani tak nehraje roli, protože vrstvy počítám dynamicky), ale maximální počet skupin (maximální číslo!). Počet skupin nemůže být vyšší než počet vrstev (logické).
pondělí 23. února 2015
Strukturální návrh programu
Tento návrh představuje rozdělení hlavní struktury programu z hlediska funkčnosti. Výpis nezobrazuje vlákna jako procesy, ale struktury dat, které jednotlivá vlákna potřebují:
Global_object->thread[element]->group[element]->layer[element]->info struct
Global_object->thread[element]->group[element]->layer[element]->bmp struct
Global_object->thread[element]->group[element]->layer[element]->png struct
Global_object->thread[element]->group[element]->layer[element]->jpeg struct
Global_object->arguments
Global_object->main[element]->group[element]->layer[element]->info struct
Global_object->main[element]->group[element]->layer[element]->bmp struct
Global_object->main[element]->group[element]->layer[element]->png struct
Global_object->main[element]->group[element]->layer[element]->jpeg struct
Program by se měl automaticky spustit do threadu 0, bey ohledu na to jestli půjde o multivláknový proces. Pokud půjde o vícevláknový proces. V první threadu se rozparsují argumenty, nejen z příkazové řádky, ale i ze souborů s vrstvami, barvami, a vše se připraví. Pokud se jedná o více vláknový proces, první vlákno určí co připadne kterému vláknu. Poté co se všechny thready dokončí mohou se vlákna sama ukončit a program se ukončí nebo se přejde na main, což je to samé co vlákno, rozdíl je v tom, že main není určený na multiprocessing, ale např. ke sloučení obrázků z vláken do společného "vlákna". Bylo by možné pracovat s mainem a pak zase vše rozdělit na jednotlivé obrázky uvnitř vláken.
Příklad: zadáte příkaz na hromadné zpracování souborů. Jedná se o menší obrázky ze kterých se skládá celý obraz. Program provede konverzi do HSV, případně další akce a úpravu obrázků nebo vytvoření masek k nim. Pak přejde do "společného vlákna", v mainu vše zkompletuje do jednoho velkého bufferu (zásobníku). Nutno podotknout, že každé vlákno má své vlastní zásobníky, vždy se ale bude pracovat jen s jednou strukturou bmp, jpeg či png. Poté co jsou všechny obrazy zkompletovány v mainu, by bylo velmi dobré vyčistit všechny vlákna a uvolnit paměť těchto vláken (pokud ji však nebudu ještě potřebovat - jako že asi ano). Potom mohu provést blur masky a provést další efekty na obrazu, který nakonec opět rozdělím do menších částí a teto poslední úkon provedou opět jednotlivá vlákna. Dochází tedy ke zkopírování dat do jednotlivých vláken odkud se převedou na RGB a pak uloží. Až všechny vlákna skončí, tak mohu uvolnit paměť hlavního bufferu a paměť vláken.
Ještě podotknu že vlákna se dělí na skupiny a na vrstvy. Vrstvy by teoreticky bylo možné dělit na skupiny, tak proč toho nevyužít...
Global_object->thread[element]->group[element]->layer[element]->info struct
Global_object->thread[element]->group[element]->layer[element]->bmp struct
Global_object->thread[element]->group[element]->layer[element]->png struct
Global_object->thread[element]->group[element]->layer[element]->jpeg struct
Global_object->arguments
Global_object->main[element]->group[element]->layer[element]->info struct
Global_object->main[element]->group[element]->layer[element]->bmp struct
Global_object->main[element]->group[element]->layer[element]->png struct
Global_object->main[element]->group[element]->layer[element]->jpeg struct
Program by se měl automaticky spustit do threadu 0, bey ohledu na to jestli půjde o multivláknový proces. Pokud půjde o vícevláknový proces. V první threadu se rozparsují argumenty, nejen z příkazové řádky, ale i ze souborů s vrstvami, barvami, a vše se připraví. Pokud se jedná o více vláknový proces, první vlákno určí co připadne kterému vláknu. Poté co se všechny thready dokončí mohou se vlákna sama ukončit a program se ukončí nebo se přejde na main, což je to samé co vlákno, rozdíl je v tom, že main není určený na multiprocessing, ale např. ke sloučení obrázků z vláken do společného "vlákna". Bylo by možné pracovat s mainem a pak zase vše rozdělit na jednotlivé obrázky uvnitř vláken.
Příklad: zadáte příkaz na hromadné zpracování souborů. Jedná se o menší obrázky ze kterých se skládá celý obraz. Program provede konverzi do HSV, případně další akce a úpravu obrázků nebo vytvoření masek k nim. Pak přejde do "společného vlákna", v mainu vše zkompletuje do jednoho velkého bufferu (zásobníku). Nutno podotknout, že každé vlákno má své vlastní zásobníky, vždy se ale bude pracovat jen s jednou strukturou bmp, jpeg či png. Poté co jsou všechny obrazy zkompletovány v mainu, by bylo velmi dobré vyčistit všechny vlákna a uvolnit paměť těchto vláken (pokud ji však nebudu ještě potřebovat - jako že asi ano). Potom mohu provést blur masky a provést další efekty na obrazu, který nakonec opět rozdělím do menších částí a teto poslední úkon provedou opět jednotlivá vlákna. Dochází tedy ke zkopírování dat do jednotlivých vláken odkud se převedou na RGB a pak uloží. Až všechny vlákna skončí, tak mohu uvolnit paměť hlavního bufferu a paměť vláken.
Ještě podotknu že vlákna se dělí na skupiny a na vrstvy. Vrstvy by teoreticky bylo možné dělit na skupiny, tak proč toho nevyužít...
neděle 15. února 2015
Analýza obrazu a databáze
Brzo bych chtěl zkusit začít pracovat na importování zdrojů do databáze. Ve skutečnosti je tolik věcí o kterých přemýšlím a pořádně se nemohu rozhodnout co dřív dělat. Jen ty nápady dostat z hlavy a zrealizovat. Přemýšlím o předběžné rychlo-analýze zdroje, ta by probíhala hned po uložení do počítače.
Co užitečného se dá ze zdroje vyčíst?
Máme dva typy obrazů: jpeg (snímek ortofoto) a png (mapka v několika málo barvách). Ty dva obrázky se musí dokonale vzájemně překrývat což není problém. Analýzou bych chtěl spočítat průměrné barvy náležící určitým "logickým vrstvám". Dejme tomu, že logickou vrstvou myslím řeku, strom, nebo červenou střechu baráku. Chci zjistit co je na fotce, kolik je tam stromů, jak moc jsou zelené (jako mají zhruba průměrnou barvu), chci zjistit jestli je tam voda a jakou má barvu, chci zjistit jakou barvu má tráva.
Předběžný postup analýzy:
Nejdříve potřebuju soubor s definicemi logických vrstev a rozsahů barev. Například pro řeku či vodu přiřadím odstín 80°-131°, 28-31% saturace, světlost 29-36% ... to se týká fotky. Pokud jde o mapku, tak tam jsou jiné barvy, potřebuju znát modrou barvu, která patří k řece. Nejdříve budu hledat v png barvy odpovídající řece, pokud najdu, zjistím jaká barva je na fotce na stejné souřadnici x,y. Pokud splňuje výše uvedené podmínky pak je to řeka a přidám hodnotu barvy do pole. Nakonci mohu spočítat průměrnou barvu, průměrnou minimální a průměrnou maximální barvu řeky či vodního povrchu. Musím dodat, že budu sbírat vzorky každých 5 pixelů, tzn. mělo by to jít asi 18x rychleji než.u kompletní analýzy všech pixelů.
Podobným způsobem mohu zjistit barvu stromů, rozdíl je jen v tom, že to nebudu porovnávat se mapkou png. V tomto případě budu obrázek procházet a každých 5 pixelů se podívám jestli barva odpovídá barvě stromu. Pokud ano, pak hledám další pixel, pokud jsem našel, pak vím, že když jsou už dva, tak je tam skutečně strom. Případně bych mohl jednotlivé stromy ukládat (tj. souřadnice x,y těch dvou nalezených vzorků) a pak porovnávat následující řadu y, s předchozím nálezem v řadě y-1, a tak bych mohl opět potvrdit zda tam leží strom a pokud ano, znám vlastně i jeho středový bod. Otázka je co pak s takovými výsledky udělám. Určitě mohu díky tomu zjisti alespoň průměrnou barvu stromu.
U trávy se očekává, že bude světlejší než stromy a mají trochu jinou barvu, takže díky tomu mohu zjistit i to, kde je tráva a jakou barvu má tráva. Mohu například zjistit kde leží pole nebo vyschlá půda či lom.
Všechny nalezené údaje by mělo být možné uložit do palety barev + množství nalezených způměrovaných barev dané logické vrstvy by také bylo možné zapsat do palety. S těmito čísly mohu později provést proces korekce barev a doladit například ty fotky které jsou moc tmavé, nebo jinak využít informací o tom co se nalézá na obrázku.
Předběžný postup importování dat:
Importování se týká přesunu obrazů do databáze, aby se na disku neválelo mnoho souborů. fotky přesunu do databáze, která bude tvořit asi cca 26kb na jeden soubor. Každý db soubor bude obsahovat jeden zdroj. Tak např. zoom 18 by měl být v databázi pro zoom 18 (originály). Přesun znamená pouze zkopírovat soubor, ale odstranit přitom informaci o tom jakého zoomu se foto týká.
Výhoda: rychlý přístup k souborům.
Nevýhoda: zabere více místa na disku.
Poté co bude staženo určité množství zdrojů potřebných k vytvoření určitého LODu (e.g oblast lodu 8) by bylo možné přesunout soubory z této databáze do databáze "komprimovaného" typu, která by obsahovala 1000kbyte na řádek.
Výhoda: tato databáze by zabírala podstatně méně místa (ušetříte min. 2x tolik místa na disku). Výhodou je také celková rychlost načítání dat.
Nevýhoda: bude vyhledávání souboru bude malinko pomalejší než u předchozího typu nekomprimované databáze, ale stále mnohem rychlejší než hledání jednotlivých souborů na disku (máte-li ve složce stovky, tisíce ba desetitisíce či statisíce souborů tak to trvá než systém najde požadovaný soubor.
Nevýhoda databází:
Pokud si databázi nevypálíte na DVD a dojde u vás k nějaké ztrátě dat na disku, tak přijdete o všechno co jste si uložili (veškeré originální zdroje). Možná to systém zvládne opravit, ale je otázka jestli takový opravený databázový soubor ještě bude funkční).
Aktualizováno:Naštěstí se soubory jpg i png dají zkrátit o hlavičku, čímž se zmenší velikost databázového souboru. Tvar hlavičky JPEG . Je tam několik bytů, které mohu vypustit a se tím při velkém množství souborů zmenší velikost databáze o desítky až stovky megabyte. U jpg souboru veskutečnosti vidím 250 bytů které se zdá se vůbec nemění. Předpokládám tedy, že pokud zdroj a velikost obrázků budou stejné dá se do vypustit a ušetřit slušný kus místa (těch 250 bytů je možné přesunout na začátek databáze).
Co užitečného se dá ze zdroje vyčíst?
Máme dva typy obrazů: jpeg (snímek ortofoto) a png (mapka v několika málo barvách). Ty dva obrázky se musí dokonale vzájemně překrývat což není problém. Analýzou bych chtěl spočítat průměrné barvy náležící určitým "logickým vrstvám". Dejme tomu, že logickou vrstvou myslím řeku, strom, nebo červenou střechu baráku. Chci zjistit co je na fotce, kolik je tam stromů, jak moc jsou zelené (jako mají zhruba průměrnou barvu), chci zjistit jestli je tam voda a jakou má barvu, chci zjistit jakou barvu má tráva.
Předběžný postup analýzy:
Nejdříve potřebuju soubor s definicemi logických vrstev a rozsahů barev. Například pro řeku či vodu přiřadím odstín 80°-131°, 28-31% saturace, světlost 29-36% ... to se týká fotky. Pokud jde o mapku, tak tam jsou jiné barvy, potřebuju znát modrou barvu, která patří k řece. Nejdříve budu hledat v png barvy odpovídající řece, pokud najdu, zjistím jaká barva je na fotce na stejné souřadnici x,y. Pokud splňuje výše uvedené podmínky pak je to řeka a přidám hodnotu barvy do pole. Nakonci mohu spočítat průměrnou barvu, průměrnou minimální a průměrnou maximální barvu řeky či vodního povrchu. Musím dodat, že budu sbírat vzorky každých 5 pixelů, tzn. mělo by to jít asi 18x rychleji než.u kompletní analýzy všech pixelů.
Podobným způsobem mohu zjistit barvu stromů, rozdíl je jen v tom, že to nebudu porovnávat se mapkou png. V tomto případě budu obrázek procházet a každých 5 pixelů se podívám jestli barva odpovídá barvě stromu. Pokud ano, pak hledám další pixel, pokud jsem našel, pak vím, že když jsou už dva, tak je tam skutečně strom. Případně bych mohl jednotlivé stromy ukládat (tj. souřadnice x,y těch dvou nalezených vzorků) a pak porovnávat následující řadu y, s předchozím nálezem v řadě y-1, a tak bych mohl opět potvrdit zda tam leží strom a pokud ano, znám vlastně i jeho středový bod. Otázka je co pak s takovými výsledky udělám. Určitě mohu díky tomu zjisti alespoň průměrnou barvu stromu.
U trávy se očekává, že bude světlejší než stromy a mají trochu jinou barvu, takže díky tomu mohu zjistit i to, kde je tráva a jakou barvu má tráva. Mohu například zjistit kde leží pole nebo vyschlá půda či lom.
Všechny nalezené údaje by mělo být možné uložit do palety barev + množství nalezených způměrovaných barev dané logické vrstvy by také bylo možné zapsat do palety. S těmito čísly mohu později provést proces korekce barev a doladit například ty fotky které jsou moc tmavé, nebo jinak využít informací o tom co se nalézá na obrázku.
Předběžný postup importování dat:
Importování se týká přesunu obrazů do databáze, aby se na disku neválelo mnoho souborů. fotky přesunu do databáze, která bude tvořit asi cca 26kb na jeden soubor. Každý db soubor bude obsahovat jeden zdroj. Tak např. zoom 18 by měl být v databázi pro zoom 18 (originály). Přesun znamená pouze zkopírovat soubor, ale odstranit přitom informaci o tom jakého zoomu se foto týká.
Výhoda: rychlý přístup k souborům.
Nevýhoda: zabere více místa na disku.
Poté co bude staženo určité množství zdrojů potřebných k vytvoření určitého LODu (e.g oblast lodu 8) by bylo možné přesunout soubory z této databáze do databáze "komprimovaného" typu, která by obsahovala 1000kbyte na řádek.
Výhoda: tato databáze by zabírala podstatně méně místa (ušetříte min. 2x tolik místa na disku). Výhodou je také celková rychlost načítání dat.
Nevýhoda: bude vyhledávání souboru bude malinko pomalejší než u předchozího typu nekomprimované databáze, ale stále mnohem rychlejší než hledání jednotlivých souborů na disku (máte-li ve složce stovky, tisíce ba desetitisíce či statisíce souborů tak to trvá než systém najde požadovaný soubor.
Nevýhoda databází:
Pokud si databázi nevypálíte na DVD a dojde u vás k nějaké ztrátě dat na disku, tak přijdete o všechno co jste si uložili (veškeré originální zdroje). Možná to systém zvládne opravit, ale je otázka jestli takový opravený databázový soubor ještě bude funkční).
Aktualizováno:Naštěstí se soubory jpg i png dají zkrátit o hlavičku, čímž se zmenší velikost databázového souboru. Tvar hlavičky JPEG . Je tam několik bytů, které mohu vypustit a se tím při velkém množství souborů zmenší velikost databáze o desítky až stovky megabyte. U jpg souboru veskutečnosti vidím 250 bytů které se zdá se vůbec nemění. Předpokládám tedy, že pokud zdroj a velikost obrázků budou stejné dá se do vypustit a ušetřit slušný kus místa (těch 250 bytů je možné přesunout na začátek databáze).
čtvrtek 12. února 2015
Noční textury
Právě jsem dostal nápad jak by se daly noční textury měst vylepšit. Jelikož plánuji algoritmus, který by kolem silnic a ulic vytvořil oranžové světla (pokud se mi povede ten algoritmus úspěšně vyvinout), tak bych snad mohl noční texturu obohatit také o barevné světla. Když se totiž podíváte na letecké snímky nočních měst, tak občas se objevují třeba oblasti se zelenými světly nebo i s modrými. Bylo by tedy možné udělat to tak, že poté co bych vytvořil mapu oblasti, která by odpovídala určitému LODu, označil bych razící světle zelenou a modrou barvou ty oblasti, které takové světlo obsahují. Toto by se přenášelo na mapu s menším rozlišením, aby mohlo rychleji proběhnout zpracování údajů směrem do textur s větším rozlišením. Vyžadovalo by to však spolupráci více lidí, protože jeden člověk toto ztěží zajistí (má-li člověk porovnávat reální snímky s mapou pak by to měl být člověk který danou oblast zná, nebo je schopen nad místem přeletět v noci a udělat snímky z optimálního pohledu a optimální výšky).
úterý 10. února 2015
Komentáře, mezery a velikost písmen
Celý program bude pracovat přes příkazový řádek a standardně budou očekávány malé znaky bez mezer, kromě případů, že oddělujete hlavní argumenty.
Hlavní argument - hlavní argument je to co dává příkaz programu a je označován pomlčkou následující názvem argumentu, procedury či příkazu. Např. program.exe -hsv file.jpg tímto byste dosáhli konverze souboru file.jpg na do HSV barev. Hlavní argument je zde hsv.
Vedlejší argument - argumenty které následují až za hlavním argumentem -argument. Tyto argumenty buď budou uzavřeny uvnitř závorek (když je třeba zapsat více argumentů) nebo pokud se jedná o samostatný argument tak tam nebude ani závorka ani pomlčka.
Příklad: program.exe -load:(file1.jpg;file2.jpg) ... teď si vymýšlím. Vedlejší argumenty jsou uvnitř závorek a jsou odděleny nějakým oddělovačem.
Oddělovač - oddělovačů je několik, v závislosti na situaci. Oddělovač příkazu od argumentů nejčastěji dvojtečka. Oddělovač mezi jednotlivými argumenty může být čárka nebo středník.
Mezery - mezery obvykle oddělují hlavní argumenty. V následujícím příkladu je chyba: program.exe -load: (file1.jpg;file2.jpg) ... napíšete-li za dvojtečkou mezeru, pak vzniknou dva samostatné příkazy: -load a (file1.jpg;file2.jpg) což není žádný příkaz a bude to bráno jako chyba.
Uvozovky - pomáhaji rozlišit textový řetězec obsahující mezery.
Zvláštní situací by bylo, pokud byste napsali toto:
program.exe -load:("file 1.jpg;file 2.jpg") nebo
program.exe -load:("file 1.jpg;file 2.jpg")
V obou případech by program měl pochopit, že file 1.jpg a file 2.jpg jsou samostatné soubory.
Velikost písmen:
Vzhledem k tomu, že program akceptuje pouze malá písmena, všechny názvy souborů musí mít malé znaky.
Komentáře:
Vzhledem k tomu, že program akceptuje pouze malá písmena, napíšete-li jakoukoliv poznámku velkými písmeny, bude tato poznámka odstraněna a do příkazu samotného se nedostane. A to včetně křížku následovaného jednou nebo dvěma číslicemi.
program.exe OTEVŘI SOUBOR ČÍSLO #1 A #02 -load:("file 1.jpg;file 02.jpg")
je to to samé jako byste programu zadali napsali:
program.exe -load:("file 1.jpg;file 02.jpg")
ale toto je chyba:
je to to samé jako byste programu zadali napsali:
program.exe OTEVŘI SOUBOR ČÍSLO #001 A #002 -load:("file_001.jpg;file_002.jpg")
protože program dostane toto:
program.exe #001 #002 -load:("file_001.jpg;file_002.jpg")
#001 a #002 je totiž chápáno jako hodnota barvy (je zvykem tak psát v html formátu).
Poznámka:
Tento mechanizmus komentářů se hodí pro případ, že začnete pracovat s vrstvama a délka příkazu začne být nepřehledná. Jednoduchý komentář typu VRSTVA S POZADÍM nebo VRSTVA SE STÍNY by vám měl pomoci se zorientovat která vrstva má k čemu sloužit. Nedávejte tam ale dvojtečky.
Složené závorky: {} složené závorky budou sloužit na oddělení složitějších argumentů. Měly by sdružovat jiné argumenty, které obsahují kulaté závorky ().
Hlavní argument - hlavní argument je to co dává příkaz programu a je označován pomlčkou následující názvem argumentu, procedury či příkazu. Např. program.exe -hsv file.jpg tímto byste dosáhli konverze souboru file.jpg na do HSV barev. Hlavní argument je zde hsv.
Vedlejší argument - argumenty které následují až za hlavním argumentem -argument. Tyto argumenty buď budou uzavřeny uvnitř závorek (když je třeba zapsat více argumentů) nebo pokud se jedná o samostatný argument tak tam nebude ani závorka ani pomlčka.
Příklad: program.exe -load:(file1.jpg;file2.jpg) ... teď si vymýšlím. Vedlejší argumenty jsou uvnitř závorek a jsou odděleny nějakým oddělovačem.
Oddělovač - oddělovačů je několik, v závislosti na situaci. Oddělovač příkazu od argumentů nejčastěji dvojtečka. Oddělovač mezi jednotlivými argumenty může být čárka nebo středník.
Mezery - mezery obvykle oddělují hlavní argumenty. V následujícím příkladu je chyba: program.exe -load: (file1.jpg;file2.jpg) ... napíšete-li za dvojtečkou mezeru, pak vzniknou dva samostatné příkazy: -load a (file1.jpg;file2.jpg) což není žádný příkaz a bude to bráno jako chyba.
Uvozovky - pomáhaji rozlišit textový řetězec obsahující mezery.
Zvláštní situací by bylo, pokud byste napsali toto:
program.exe -load:("file 1.jpg;file 2.jpg") nebo
program.exe -load:("file 1.jpg;file 2.jpg")
V obou případech by program měl pochopit, že file 1.jpg a file 2.jpg jsou samostatné soubory.
Velikost písmen:
Vzhledem k tomu, že program akceptuje pouze malá písmena, všechny názvy souborů musí mít malé znaky.
Komentáře:
Vzhledem k tomu, že program akceptuje pouze malá písmena, napíšete-li jakoukoliv poznámku velkými písmeny, bude tato poznámka odstraněna a do příkazu samotného se nedostane. A to včetně křížku následovaného jednou nebo dvěma číslicemi.
program.exe OTEVŘI SOUBOR ČÍSLO #1 A #02 -load:("file 1.jpg;file 02.jpg")
je to to samé jako byste programu zadali napsali:
program.exe -load:("file 1.jpg;file 02.jpg")
ale toto je chyba:
je to to samé jako byste programu zadali napsali:
program.exe OTEVŘI SOUBOR ČÍSLO #001 A #002 -load:("file_001.jpg;file_002.jpg")
protože program dostane toto:
program.exe #001 #002 -load:("file_001.jpg;file_002.jpg")
#001 a #002 je totiž chápáno jako hodnota barvy (je zvykem tak psát v html formátu).
Poznámka:
Tento mechanizmus komentářů se hodí pro případ, že začnete pracovat s vrstvama a délka příkazu začne být nepřehledná. Jednoduchý komentář typu VRSTVA S POZADÍM nebo VRSTVA SE STÍNY by vám měl pomoci se zorientovat která vrstva má k čemu sloužit. Nedávejte tam ale dvojtečky.
Složené závorky: {} složené závorky budou sloužit na oddělení složitějších argumentů. Měly by sdružovat jiné argumenty, které obsahují kulaté závorky ().
Zamyšlení - procedura exclude
Proceduru -task jsem rámcově vysvětlil zde: Koncepce task.
Procedura -task má za cíl upřesnit kterou oblast chceme cyklicky zpracovávat. Znamená to, že -task není příkazem samo o sobě, pouze upřesňuje oblast v niž budeme provádět cyklickou činnost - výsledné obrazy se budou opakovat a skládat do čtverce s nižším LODem.
Nyní se naskytá otázka: co když daná oblast je příliš rozsáhlá? Například, uvnitř cílové oblasti LOD10 se nachází pravý horní roh o velikosti LOD11, který je v zahraničí, které je pokryto zimními fotografiemi, které jsou pro tvorbu pozemních textur nevhodné (ze zimních textur nejde udělat jarní, letní a podzimní textury). Chceme tuto oblast vyloučit z cílové oblasti, tzn. nic nechci ani ukládat, ani zpracovávat z dané oblasti.
Zatím ještě nevím jak to bude se získáváním zdrojů z této nežádoucí oblasti, protože prohlížení zdrojů bude obstarávat jiný program (AHK - Autohotkey). Nicméně AHK by mohl komunikovat s mým programem ohledně výpočtu a upřesnění oblasti, ve které má prohlížet mapu.
Procedura -exclude (...) nebo -exclude definition_file.ex by mohla upřesnit požadavek. Vyloučením určitých čtverců by se zmenšila oblast zpracování. Otázka je jestli chci příslušný LOD nadefinovat dovnitř závorek, nebo raději název souboru ve kterém budou bližší informace ohledně LODů, které mají být vyloučeny. Určitě se zde nabízí hned několik možností zápisu od jednoduchých až po složitější.
Syntaxe která mě napadá:
(n)(tabulátor)(x)(tabulátor)(y)
závorky byste nepsali, jen tabulátory mezi daty a místo n číslo LODu.
Předpokladem ale je, že tento čtverec, který chcete vyloučit z výsledků musí být uvnitř vašeho cílového čtverce.
Pokud by nebyl přímo uvnitř, protože byste chtěli vyloučit menší LOD než 1/4, např. 1/8 toho cílového LODu, pak by bylo přehlednější akceptovat tento přístup:
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>(n+1_exclude)(tabulátor)(x_exclude)(tabulátor)(y_exclude)
Slovo n_cíl nahradíte za váš cílový LOD, který nechcete vyloučit. x_cíl a y_cíl jsou jeho souřadnice x,y. Vpravo však už je čtverec, který bude vyloučen a jelikož je LOD větší +1 proto jsem tam napsal n+1, což nahradíte za číslo LODU.
Takto by bylo možno zaměřit více konkrétních lodů a použít i hlubší nasměrování prostě jak kdybyste používaly tuto mapku.
Nakonec by se hodilo i nějaké zjednodušení pro případ, že chcete vyloučit dva lody najednou:
buď zleva, zprava, zezdola nebo zehora:
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>l
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>r
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>u
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>b
kde písmena l,r,u,b reprezentují anglické zkratky left,right,upper,bottom.
Další možné zjednodušení, které mě napadá, je nahradit první zápis písmeny:
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>ul
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>ur
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>bl
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>br
kde písmena ul,ur,bl,br reprezentují anglické zkratky upper left,upper right,bottom left a bottom rigght.
Tím byste vůbec nemuseli psát souřadnice. Toto je už poměrně slušné zjednodušení zápisu:
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>ul>ul
Příklad:
10 552 346>ul>r
LOD 10 Severozápadní čtverec Prahy by byl čtverec, který chcete zpracovat. Přiblížíte si upper left (čtverec LOD11 nahoře zleva) a v něm vidíte napravo velký zelený prostor sloupec LOD10, který se zezhora "nezdá být osídlen". Či-li ty dva čtverce napravo nebudeme stahovat (nebo zpracovávat).
Je třeba zdůraznit, že -exclude by měl být aplikován pouze v případech výjimek a na takové čtverce, které nebudou procedurálně zahrnuty. Pokud například budu vyžadovat spojení mnoha souborů do jednoho souboru, abych mohl vytvořit masku o nižším LODu, ale tento LOD bude zasahovat do oblasti kterou jsem vyloučil, pak nebude možné takové sloučení masek provést protože nebudu mít potřebné data.
Aktualizováno - Task:
Celá věc se dá zjednodušit. Proč nenapsat rovnou jeden soubor task, tedy s koncovkou .tsk, který bude obsahovat jak cílovou oblast, tak vyloučené oblasti. V podstatě by člověk rovnou za parametr -task uvedl soubor s definicemi zdrojové oblasi.
Otázka, kterou je třeba vyřešit:
- psát definice include a definice exclude zvlášť nebo pouze definice exclude?
Dále, se mi zdá praktičtější používat jiný oddělovač než tabulátor, protože zápisy by mohly být delší (na drouhou stranu někomu může vyhovovat tabulátor kvůli kopírování dat z tabulkového procesoru). Napadlo mě podtržítko, to se už ale používá u regulárního výrazu -r regex , který se však vztahuje k názvům zdrojových souborů a předpokládá se, že obyčejně druhým číslem je y, třetím x, tedy naopak než u parametru task:include/exclude. Pomlčka by zase mohla mít lepší využití, ta by mohla sloužit jako symbol pro to jestli má být následující oblast vyloučena. Kdežto znaménko "+" by se dalo použít naopak jako definici toho co má být zahrnuto. Možná nejjednodušším a nejdostupnějším oddělovačem by byla obyčejná tečka (nebo čárka).
Příklad:
10.552.346->ul>r
To zprvu vypadá jako jedno číslo, ale jsou to tři čísla. Oblast lodu 10, x=552 a y=346. Následující pomlčka by znamenala, že následující má být vyloučeno: z oblasti vnořeného lodu vlevo nahoře (LOD11) bychom vyloučili pouze oblast vpravé polovině, tj. celkem by byly vyloučeny pouze dva čtverce LODu 12.
Pokud byste chtěli zpracovat další oblasti (nikoliv vyloučit, ale zahrnout do výsledku) mohli byste pokračovat takto:
10.552.346->ul>r
10.553.346+
10.554.346+
Což by znamenalo, že si přejete stáhnout (nebo zpracovat) 3 čtverce LODu 10, ale jen z prvního byste něco vyloučili.
Nejlepší řešení bude, když si hned na začátku souboru budete moci nadefinovat pořadí čísel x,y
Nakonec, nepředpokládám, že by bylo vhodné soubor používat tak, abyste stahovali/upravovali čtverce s odlišnou velikostí, proto si myslím že by vlastně stačilo nadefinovat nejdříve tyto údaje, které by následně platili pro celý soubor:
@N # maximální počet includů a excludů v souboru dohromady (urychlí parsování souboru)
$13 11 # První číslo označuje zoom zdrojových (tj. původních) souborů čili "level of detail"; druhé číslo je nepovinné a mělo by být použito pouze pokud chcete soubory sdružovat do nadřazených celků o jiném LODu (užití například při -join spojování obrazů nebo u exportu textur do bgl souborů)
(x,y) # znaky x,y označují pořadí, ve kterém chcete zadávat údaje - zde by bylo možná lepší použit opět obrácené pořadí, aby se vám to nepletlo, když obrazové soubory budete mít uložené ve smysli n_y_x.jpg kvůli přehlednému seřazení. Takto se dají soubory snadněji představit, když je uspořádáte do mřížky zezhora dolů.A pak už byste psali jen n,x,y+... nebo n,x,y-..>... atd.
Oddělovač, který je použit uvnitř (x,y) může posloužit jako definice oddělovače. Změňte na (y.x) a můžete psát ve formátu n.y.x+... n.y.x-..>.. apod.
Předpokládá se, že zpracovávání textur bude probíhat po menších dílech, takže takový postup by měl být ideální. Je však možné, že budete potřebovat více druhů souborů task, protože v každém můžete mít jiné LODy (čtverce), případně.si můžete číslovat soubory podle toho co který den uděláte: 01.01.tsk může být práce udělaná 1.1. a skončíte někdy 31.12. takže 31.12.tsk bude název posledního souboru.
Ještě jednou vysvětlím proč jsem přidal $. Program potřebuje znát nejen cílovou oblast, ve které chcete provádět stahování či editace souborů, ale také v jaké velikosti jsou ty stažené nebo editované soubory tedy v jakém zoomu/levelu jsou. Zatímco hlavní údaj LOD, představuje skupinu souborů, dolar $ mu řekne, jak se budou jmenovat osubory se kterými bude později pracovat. Na prvním místě je číslo zdrojového souboru a na druhém číslo souboru, do kterého se to sloučí. Jen pro jistotu dám zjednodušený příklad:
kdybyste chtěli editovat 4 soubory o zoomu 1: máte 4 čtverce o souřadnicích x,y: 0,0; 1,0; 0,1; 1,0; když je zeditujete a sloučíte dohromady, výsledný soubor bude mít číslo 0_0_0.jpg nebo 0_0_0.bgl protože výsledek bude úroveň nula a číslo souboru 0_0. Mimochodem: tady je krásně vidět, proč nestačí pojmenovávat soubory jen údajem 0_0, protože první soubor o zoomu 1 má stejné číslo jako první soubor o zoomu 0, ale to je spíš taková vzácná výjimka.
Mapka čtverců
PŘÍKLAD 2:
# Mapa Evropy v zoomu 4/3: zahrnuje i kousek severní Afriky
@10 # maximální počet includů a excludů v souboru dohromady (urychluje parsování souboru)
$4 3 # První číslo původní zdrojové soubory; druhé číslo je nepovinné a mělo by být použito pouze pokud chcete soubory sdružovat do nadřazených celků o jiném LODu
(x.y) # znaky x,y označují pořadí, ve kterém chcete zadávat údaje, zároveň zde definujete oddělovač
3.4.2+ # celý čtverec 4,2 v zoomu 3
3.3.2->l # čtverec 3,2 v zoomu 3 kromě horních dvou čtverců v zoomu 4
3.3.3+>tr# ze čtverece 3,3 v zoomu 3 se zahrne pouze roh vpravo nahoře (zoom 4)
3.4.3+>t # ze čtverece 4,3 v zoomu 3 se zahrnou pouze dva čtverce nahoře (zoom 4)
Poznámka:
Vyloučit tři pod-čtverce znamená zahrnout jeden a naopak. V příkazu je možné pracovat jen se dvěma čtverci, zbytek se odvodí..Program funguje tak, že si dopočítá čísla čtverců, se kterými chcete pracovat a čísla čtverců se kterými pracovat nechcete, takže pokud se pokusíte zpřístupnit nějakou úroveň, která je mimo dosah toho co jste definovali pomocí $a... kde a je číslo definující zdrojový level/zoom... tak dostanete chybovou hlášku.
Následující zápisy by měly být ekvivalentní:
3.4.3+>t
3.4.3+>t+
3.4.3>t+
3.4.3>t
Pro vyloučení by platilo exvyvalentně:
3.4.3->t
3.4.3->t-
3.4.3>t-
V případě že potřebujete provést v daném čtverci vícero vyloučení by mělo platit:
3.4.3->
-tl>lt
-tr>lt
-bl>lt
-br>lt
V případě že potřebujete provést v daném čtverci vícero zahrnutí by mělo platit:
3.4.3+>
+tl>lt
+tr>lt
+bl>lt
+br>lt
Tzn. nejdříve napíšete tři čísla definují zoom,x,y pak dáváte znaménko informující jestli bude zahrnovat nebo vylučovat. Znaménko > pokračující znakem nového řádku informuje o tom, že bude následovat série příkazů. Když si čtverec 4,3 rozdělíte na čtyři čtverce top-left, top-right, bottom-left a bottom-right, tak z každého následně zahrnu levý horní roh (na pořadí písmen by nemělo záležet). Protože na konci řádku není znaménko > tak se ji6 hloub2ji nepostupuje, ale teoreticky i to by bylo možné:
3.4.3+>
+tl>t>
tl
+tl>t>
bl
+bl>lt
+br>lt
Na předchozím příkladu vidíte že dvakrát zahrnuji ze stejného pod-čtverce a pak pokračuji čtverci o větším zoomu.
Procedura -task má za cíl upřesnit kterou oblast chceme cyklicky zpracovávat. Znamená to, že -task není příkazem samo o sobě, pouze upřesňuje oblast v niž budeme provádět cyklickou činnost - výsledné obrazy se budou opakovat a skládat do čtverce s nižším LODem.
Nyní se naskytá otázka: co když daná oblast je příliš rozsáhlá? Například, uvnitř cílové oblasti LOD10 se nachází pravý horní roh o velikosti LOD11, který je v zahraničí, které je pokryto zimními fotografiemi, které jsou pro tvorbu pozemních textur nevhodné (ze zimních textur nejde udělat jarní, letní a podzimní textury). Chceme tuto oblast vyloučit z cílové oblasti, tzn. nic nechci ani ukládat, ani zpracovávat z dané oblasti.
Zatím ještě nevím jak to bude se získáváním zdrojů z této nežádoucí oblasti, protože prohlížení zdrojů bude obstarávat jiný program (AHK - Autohotkey). Nicméně AHK by mohl komunikovat s mým programem ohledně výpočtu a upřesnění oblasti, ve které má prohlížet mapu.
Procedura -exclude (...) nebo -exclude definition_file.ex by mohla upřesnit požadavek. Vyloučením určitých čtverců by se zmenšila oblast zpracování. Otázka je jestli chci příslušný LOD nadefinovat dovnitř závorek, nebo raději název souboru ve kterém budou bližší informace ohledně LODů, které mají být vyloučeny. Určitě se zde nabízí hned několik možností zápisu od jednoduchých až po složitější.
Syntaxe která mě napadá:
(n)(tabulátor)(x)(tabulátor)(y)
závorky byste nepsali, jen tabulátory mezi daty a místo n číslo LODu.
Předpokladem ale je, že tento čtverec, který chcete vyloučit z výsledků musí být uvnitř vašeho cílového čtverce.
Pokud by nebyl přímo uvnitř, protože byste chtěli vyloučit menší LOD než 1/4, např. 1/8 toho cílového LODu, pak by bylo přehlednější akceptovat tento přístup:
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>(n+1_exclude)(tabulátor)(x_exclude)(tabulátor)(y_exclude)
Slovo n_cíl nahradíte za váš cílový LOD, který nechcete vyloučit. x_cíl a y_cíl jsou jeho souřadnice x,y. Vpravo však už je čtverec, který bude vyloučen a jelikož je LOD větší +1 proto jsem tam napsal n+1, což nahradíte za číslo LODU.
Takto by bylo možno zaměřit více konkrétních lodů a použít i hlubší nasměrování prostě jak kdybyste používaly tuto mapku.
Nakonec by se hodilo i nějaké zjednodušení pro případ, že chcete vyloučit dva lody najednou:
buď zleva, zprava, zezdola nebo zehora:
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>l
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>r
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>u
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>b
kde písmena l,r,u,b reprezentují anglické zkratky left,right,upper,bottom.
Další možné zjednodušení, které mě napadá, je nahradit první zápis písmeny:
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>ul
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>ur
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>bl
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>br
kde písmena ul,ur,bl,br reprezentují anglické zkratky upper left,upper right,bottom left a bottom rigght.
Tím byste vůbec nemuseli psát souřadnice. Toto je už poměrně slušné zjednodušení zápisu:
(n_cíl)(tabulátor)(x_cíl)(tabulátor)(y_cíl)>ul>ul
Příklad:
10 552 346>ul>r
LOD 10 Severozápadní čtverec Prahy by byl čtverec, který chcete zpracovat. Přiblížíte si upper left (čtverec LOD11 nahoře zleva) a v něm vidíte napravo velký zelený prostor sloupec LOD10, který se zezhora "nezdá být osídlen". Či-li ty dva čtverce napravo nebudeme stahovat (nebo zpracovávat).
Je třeba zdůraznit, že -exclude by měl být aplikován pouze v případech výjimek a na takové čtverce, které nebudou procedurálně zahrnuty. Pokud například budu vyžadovat spojení mnoha souborů do jednoho souboru, abych mohl vytvořit masku o nižším LODu, ale tento LOD bude zasahovat do oblasti kterou jsem vyloučil, pak nebude možné takové sloučení masek provést protože nebudu mít potřebné data.
Aktualizováno - Task:
Celá věc se dá zjednodušit. Proč nenapsat rovnou jeden soubor task, tedy s koncovkou .tsk, který bude obsahovat jak cílovou oblast, tak vyloučené oblasti. V podstatě by člověk rovnou za parametr -task uvedl soubor s definicemi zdrojové oblasi.
Otázka, kterou je třeba vyřešit:
- psát definice include a definice exclude zvlášť nebo pouze definice exclude?
Dále, se mi zdá praktičtější používat jiný oddělovač než tabulátor, protože zápisy by mohly být delší (na drouhou stranu někomu může vyhovovat tabulátor kvůli kopírování dat z tabulkového procesoru). Napadlo mě podtržítko, to se už ale používá u regulárního výrazu -r regex , který se však vztahuje k názvům zdrojových souborů a předpokládá se, že obyčejně druhým číslem je y, třetím x, tedy naopak než u parametru task:include/exclude. Pomlčka by zase mohla mít lepší využití, ta by mohla sloužit jako symbol pro to jestli má být následující oblast vyloučena. Kdežto znaménko "+" by se dalo použít naopak jako definici toho co má být zahrnuto. Možná nejjednodušším a nejdostupnějším oddělovačem by byla obyčejná tečka (nebo čárka).
Příklad:
10.552.346->ul>r
To zprvu vypadá jako jedno číslo, ale jsou to tři čísla. Oblast lodu 10, x=552 a y=346. Následující pomlčka by znamenala, že následující má být vyloučeno: z oblasti vnořeného lodu vlevo nahoře (LOD11) bychom vyloučili pouze oblast vpravé polovině, tj. celkem by byly vyloučeny pouze dva čtverce LODu 12.
Pokud byste chtěli zpracovat další oblasti (nikoliv vyloučit, ale zahrnout do výsledku) mohli byste pokračovat takto:
10.552.346->ul>r
10.553.346+
10.554.346+
Což by znamenalo, že si přejete stáhnout (nebo zpracovat) 3 čtverce LODu 10, ale jen z prvního byste něco vyloučili.
Nejlepší řešení bude, když si hned na začátku souboru budete moci nadefinovat pořadí čísel x,y
Nakonec, nepředpokládám, že by bylo vhodné soubor používat tak, abyste stahovali/upravovali čtverce s odlišnou velikostí, proto si myslím že by vlastně stačilo nadefinovat nejdříve tyto údaje, které by následně platili pro celý soubor:
@N # maximální počet includů a excludů v souboru dohromady (urychlí parsování souboru)
$13 11 # První číslo označuje zoom zdrojových (tj. původních) souborů čili "level of detail"; druhé číslo je nepovinné a mělo by být použito pouze pokud chcete soubory sdružovat do nadřazených celků o jiném LODu (užití například při -join spojování obrazů nebo u exportu textur do bgl souborů)
(x,y) # znaky x,y označují pořadí, ve kterém chcete zadávat údaje - zde by bylo možná lepší použit opět obrácené pořadí, aby se vám to nepletlo, když obrazové soubory budete mít uložené ve smysli n_y_x.jpg kvůli přehlednému seřazení. Takto se dají soubory snadněji představit, když je uspořádáte do mřížky zezhora dolů.A pak už byste psali jen n,x,y+... nebo n,x,y-..>... atd.
Oddělovač, který je použit uvnitř (x,y) může posloužit jako definice oddělovače. Změňte na (y.x) a můžete psát ve formátu n.y.x+... n.y.x-..>.. apod.
Předpokládá se, že zpracovávání textur bude probíhat po menších dílech, takže takový postup by měl být ideální. Je však možné, že budete potřebovat více druhů souborů task, protože v každém můžete mít jiné LODy (čtverce), případně.si můžete číslovat soubory podle toho co který den uděláte: 01.01.tsk může být práce udělaná 1.1. a skončíte někdy 31.12. takže 31.12.tsk bude název posledního souboru.
Ještě jednou vysvětlím proč jsem přidal $. Program potřebuje znát nejen cílovou oblast, ve které chcete provádět stahování či editace souborů, ale také v jaké velikosti jsou ty stažené nebo editované soubory tedy v jakém zoomu/levelu jsou. Zatímco hlavní údaj LOD, představuje skupinu souborů, dolar $ mu řekne, jak se budou jmenovat osubory se kterými bude později pracovat. Na prvním místě je číslo zdrojového souboru a na druhém číslo souboru, do kterého se to sloučí. Jen pro jistotu dám zjednodušený příklad:
kdybyste chtěli editovat 4 soubory o zoomu 1: máte 4 čtverce o souřadnicích x,y: 0,0; 1,0; 0,1; 1,0; když je zeditujete a sloučíte dohromady, výsledný soubor bude mít číslo 0_0_0.jpg nebo 0_0_0.bgl protože výsledek bude úroveň nula a číslo souboru 0_0. Mimochodem: tady je krásně vidět, proč nestačí pojmenovávat soubory jen údajem 0_0, protože první soubor o zoomu 1 má stejné číslo jako první soubor o zoomu 0, ale to je spíš taková vzácná výjimka.
Mapka čtverců
PŘÍKLAD 2:
# Mapa Evropy v zoomu 4/3: zahrnuje i kousek severní Afriky
@10 # maximální počet includů a excludů v souboru dohromady (urychluje parsování souboru)
$4 3 # První číslo původní zdrojové soubory; druhé číslo je nepovinné a mělo by být použito pouze pokud chcete soubory sdružovat do nadřazených celků o jiném LODu
(x.y) # znaky x,y označují pořadí, ve kterém chcete zadávat údaje, zároveň zde definujete oddělovač
3.4.2+ # celý čtverec 4,2 v zoomu 3
3.3.2->l # čtverec 3,2 v zoomu 3 kromě horních dvou čtverců v zoomu 4
3.3.3+>tr# ze čtverece 3,3 v zoomu 3 se zahrne pouze roh vpravo nahoře (zoom 4)
3.4.3+>t # ze čtverece 4,3 v zoomu 3 se zahrnou pouze dva čtverce nahoře (zoom 4)
Poznámka:
Vyloučit tři pod-čtverce znamená zahrnout jeden a naopak. V příkazu je možné pracovat jen se dvěma čtverci, zbytek se odvodí..Program funguje tak, že si dopočítá čísla čtverců, se kterými chcete pracovat a čísla čtverců se kterými pracovat nechcete, takže pokud se pokusíte zpřístupnit nějakou úroveň, která je mimo dosah toho co jste definovali pomocí $a... kde a je číslo definující zdrojový level/zoom... tak dostanete chybovou hlášku.
Následující zápisy by měly být ekvivalentní:
3.4.3+>t
3.4.3+>t+
3.4.3>t+
3.4.3>t
Pro vyloučení by platilo exvyvalentně:
3.4.3->t
3.4.3->t-
3.4.3>t-
V případě že potřebujete provést v daném čtverci vícero vyloučení by mělo platit:
3.4.3->
-tl>lt
-tr>lt
-bl>lt
-br>lt
V případě že potřebujete provést v daném čtverci vícero zahrnutí by mělo platit:
3.4.3+>
+tl>lt
+tr>lt
+bl>lt
+br>lt
Tzn. nejdříve napíšete tři čísla definují zoom,x,y pak dáváte znaménko informující jestli bude zahrnovat nebo vylučovat. Znaménko > pokračující znakem nového řádku informuje o tom, že bude následovat série příkazů. Když si čtverec 4,3 rozdělíte na čtyři čtverce top-left, top-right, bottom-left a bottom-right, tak z každého následně zahrnu levý horní roh (na pořadí písmen by nemělo záležet). Protože na konci řádku není znaménko > tak se ji6 hloub2ji nepostupuje, ale teoreticky i to by bylo možné:
3.4.3+>
+tl>t>
tl
+tl>t>
bl
+bl>lt
+br>lt
Na předchozím příkladu vidíte že dvakrát zahrnuji ze stejného pod-čtverce a pak pokračuji čtverci o větším zoomu.
Zamyšlení - procedura task
Zamyšlení nad koncepcí programu a zpracováním argumentů programu.
Myslím že na stránce Přehled jsem psal o tom jak bych chtěl zrealizovat spojování obrazů do jednoho pomoci -join (...). Taky jsem ale psal něco o hromadném zpracovávání souborů ve smyslů celých oblastí lodů. Jde o to, že procedura join a hromadné zpracování lodů nemusí být automaticky to samé.
Představte si, že máte textury v LODu 18 (256x256 px), které vám pokrývají například oblast o velikosti LOD10. Chtěli byste ty soubory LOD spojit do dílčích celků, ale aby nebyly příliš gigantické, tedy maximálně 4096x4096px na obrázek. Chcete tedy spojovat obrazy na úrovni LODu 14. Ale takových obrázků je uvnitř oblasti LOD10 spousta a vy nechcete pokaždé opakovat celý příkaz znova a pokaždé vypisovat přesné čísla lodů... Proto by tu měla být nějaká funkce či procedura, která bude mít za cíl opakovat příkaz automaticky pro danou oblast a sama dosadí potřebná čísla. Program se sám zaúkoluje. Myslím že ideální název pro tuto funkci by byla procedura -task(...) . Do závorek bude třeba vepsat číslo LODu a konkrétní kachli (finální oblast) kterou chcete zpracovat. Tato procedura by se dala hlavně využít v případech, kdy potřebuju spojit černobílé masky v LODu 18 a budu je chtít spojit například do velikosti LODu 13 za účelem provedení rozmazání (blur) s cílem dosáhnout speciálního efektu na cílových texturách. Blur totiž nelze provádět na malých kouscích o velikosti LOD18, protože by cílový pospojovaný obrázek byl plný nepřesností. To co potřebuju provést je spojit velké množství obrazů do jednoho, včetně dodatečného načtení okrajů z obrazů, které nejsou cílem rozmazání. Po rozmazání načtu jednotlivé rozmazané oblasti (čtverce o velikosti LOD18) a odešlu je do databáze. Takovouto masku později použiju na výrobu nočních textur.
Myslím že na stránce Přehled jsem psal o tom jak bych chtěl zrealizovat spojování obrazů do jednoho pomoci -join (...). Taky jsem ale psal něco o hromadném zpracovávání souborů ve smyslů celých oblastí lodů. Jde o to, že procedura join a hromadné zpracování lodů nemusí být automaticky to samé.
Představte si, že máte textury v LODu 18 (256x256 px), které vám pokrývají například oblast o velikosti LOD10. Chtěli byste ty soubory LOD spojit do dílčích celků, ale aby nebyly příliš gigantické, tedy maximálně 4096x4096px na obrázek. Chcete tedy spojovat obrazy na úrovni LODu 14. Ale takových obrázků je uvnitř oblasti LOD10 spousta a vy nechcete pokaždé opakovat celý příkaz znova a pokaždé vypisovat přesné čísla lodů... Proto by tu měla být nějaká funkce či procedura, která bude mít za cíl opakovat příkaz automaticky pro danou oblast a sama dosadí potřebná čísla. Program se sám zaúkoluje. Myslím že ideální název pro tuto funkci by byla procedura -task(...) . Do závorek bude třeba vepsat číslo LODu a konkrétní kachli (finální oblast) kterou chcete zpracovat. Tato procedura by se dala hlavně využít v případech, kdy potřebuju spojit černobílé masky v LODu 18 a budu je chtít spojit například do velikosti LODu 13 za účelem provedení rozmazání (blur) s cílem dosáhnout speciálního efektu na cílových texturách. Blur totiž nelze provádět na malých kouscích o velikosti LOD18, protože by cílový pospojovaný obrázek byl plný nepřesností. To co potřebuju provést je spojit velké množství obrazů do jednoho, včetně dodatečného načtení okrajů z obrazů, které nejsou cílem rozmazání. Po rozmazání načtu jednotlivé rozmazané oblasti (čtverce o velikosti LOD18) a odešlu je do databáze. Takovouto masku později použiju na výrobu nočních textur.
Motivace a finanční prostředky
Rozsah programu, který vyvíjím je poměrně značný. Nejsem komerčně motivován, ale vývoj bude trvat minimálně rok. Mým cílem je zanechat něco po sobě o čem budu vědět, že to slouží komunitě. Program umožní výrobu pozemních textur ve vysokém rozlišení a značné kvalitě. Textury od jara až po zimu a noční textury nevyjímaje. Program má být schopen zvládat několik požadavků najednou (multithreading). Ke splnění tohoto snu potřebuji motivaci a taky zdraví. Toho se mi ne zcela dostává, takže nemohu u počítače sedět 12 hodin denně, ale i tak strávím programováním a studováním problematiky algebraických řešení mnoho času. Určitou motivací by pro mě bylo kdyby se mi dostalo hmotné podpory. Tu zatím nemám a tak si musím vystačit se starým počítačem a málo místa na disku. Byl bych rád kdyby se mi do budoucna povedlo sehnat alespoň větší disky (nemám peníze na nové).
Průběžně budu vydávat pracovní a testovací verze programu (pojmenujme ho Texture edit podle názvu tohoto blogu), na kterých si budete moci vyzkoušet jak program funguje a jestli funguje na vašem PC. Ještě jednou opakuji, že používám Windows XP 32-bit verze na kterém pracuji, takže zatím nemohu zaručit, že program pojede i na 64-bitových systémech. Nicméně pokud byste si přesto chtěli program vyzkoušet, tak průběžně budu vydávat jednoduché testovací programy, které si budete moci stáhnout. Tyto demo verze budou mít určité omezení, například co se velikosti obrazu týče a plná verze bude k dispozici těm co mě hmotně podpoří. Stačila by mi symbolická částka 150-200 kč za testovací program bez omezení.
Plná verze programu tedy již hotová verze by byla k dispozici za symbolickou částku 500 Kč nebo výměnou za funkční pevný disk SATA o kapacitě 500-1000GB (Tj 1TB by byl dostačující, 500GB bych mohl prodat za 500Kč na Avízu). V případě že byste mi nabídli disk o kapacitě 1TB nebo víc tak byste to měli jako předplatné pro další verzi, která pokud by vyšla tak byste ji měli automaticky zcela zadarmo. Získané prostředky půjdou na koupi hardwaru (disků, bez kterých se tvorba scenérií tohoto rozsahu neobejde). Byl bych ochoten přijmout i jiný druh podpory a to ve formě léků (krabička na měsíc mě stojí 400 Kč) tím byste přispěli mému fyzickému zdraví i po psychické stránce by to byla značná úleva jelikož na to nemám. Blíže se můžeme dohodnout na vzkazích ve fóru, můj nick je VanDam.
Průběžně budu vydávat pracovní a testovací verze programu (pojmenujme ho Texture edit podle názvu tohoto blogu), na kterých si budete moci vyzkoušet jak program funguje a jestli funguje na vašem PC. Ještě jednou opakuji, že používám Windows XP 32-bit verze na kterém pracuji, takže zatím nemohu zaručit, že program pojede i na 64-bitových systémech. Nicméně pokud byste si přesto chtěli program vyzkoušet, tak průběžně budu vydávat jednoduché testovací programy, které si budete moci stáhnout. Tyto demo verze budou mít určité omezení, například co se velikosti obrazu týče a plná verze bude k dispozici těm co mě hmotně podpoří. Stačila by mi symbolická částka 150-200 kč za testovací program bez omezení.
Plná verze programu tedy již hotová verze by byla k dispozici za symbolickou částku 500 Kč nebo výměnou za funkční pevný disk SATA o kapacitě 500-1000GB (Tj 1TB by byl dostačující, 500GB bych mohl prodat za 500Kč na Avízu). V případě že byste mi nabídli disk o kapacitě 1TB nebo víc tak byste to měli jako předplatné pro další verzi, která pokud by vyšla tak byste ji měli automaticky zcela zadarmo. Získané prostředky půjdou na koupi hardwaru (disků, bez kterých se tvorba scenérií tohoto rozsahu neobejde). Byl bych ochoten přijmout i jiný druh podpory a to ve formě léků (krabička na měsíc mě stojí 400 Kč) tím byste přispěli mému fyzickému zdraví i po psychické stránce by to byla značná úleva jelikož na to nemám. Blíže se můžeme dohodnout na vzkazích ve fóru, můj nick je VanDam.
pondělí 9. února 2015
Formát JPEG
Jen taková zajímavost ohledně obrazového formátu JPEG. Kódování JPEG zajišťuje kompresi obrazu. Technologie stojí na tom principu, že se obraz nejdříve převede do barvového prostoru YCbCr, což je tříkanálový prostor. První složka představuje světlost, další dvě složky vyjadřují barvu. Dále se provádí několik kroků komprese. V prvním kroku se sníží rozlišení dvou posledních složek (zmenší se obraz ve dvou kanálech). Pak se celý obraz rozdělí na kostičky 8x8 čtverců a pak se provedou nějaké transformace a komprese. To podstatné co z toho vyplývá, že pokud pracujete s obrazem, který chcete uložit do formátu JPEG nebo máte takový soubor a chcete ho oříznout, měli byste zvolit takové rozměry, aby byly násobkem 8. Protože pokud obraz nebude oříznout tak, aby ty kostky 8x8 px přesně seděli, pak okraje obrazu ztratí na kvalitě. Když tedy vyrábíte scenérku a ořezáváte pozemní textury a chcete je skladovat ve formátu JPEG místo BMP, chcete nejspíš dát několik fotografií vedle sebe. Aby přechody mezi fotografiemi na sebe dobře navazovali a nebyly rozmazané, je třeba zachovat rozměry obrazu násobku čísla 8. V opačném případě při kompresi dojde k tomu, že se na krajích vytvoří čtverce jiné než byste chtěli. Čtverce jsou zaplněny jinými hodnotami a tak nejsou uloženy skutečné hodnoty, ale vymyšlené. Tím dojde ke snížení kvality na krajích (domnívám se že se to asi týká jen dvou krajů, pravého a levého, ale to je jen moje domněnka).
neděle 8. února 2015
Windows
Stránka Hardware byla aktualizována. Přečtěte si sekci Operační systém a operační paměť.
Dále napíšu článek k Windowsu a základy práce s AHK, které budete potřebovat pokud jste se rozhodli využít Javascript Maps API v3 pro prohlížení zdrojů a pro plugin Save images. Mám to v hlavě, tak bych to nejraději napsal hned, ale zase nemám tolik času.
Ke článku o Javascipt Maps API v3 (stáhnutelné z mého blogu): pokud vám něco není jasné, tak mi napište komentář pod nějaký článek, protože si nepamatuju jak je to se získáním API klíče, každopádně pokud se vám to povede, tak napište jak ste to udělali. Nejspíš to je v té sekci Access API. Napište jak jste tu službu aktivovali a jak jste získali klíč. Bude to pak lehčí i pro ty ostatní.
Dále napíšu článek k Windowsu a základy práce s AHK, které budete potřebovat pokud jste se rozhodli využít Javascript Maps API v3 pro prohlížení zdrojů a pro plugin Save images. Mám to v hlavě, tak bych to nejraději napsal hned, ale zase nemám tolik času.
Ke článku o Javascipt Maps API v3 (stáhnutelné z mého blogu): pokud vám něco není jasné, tak mi napište komentář pod nějaký článek, protože si nepamatuju jak je to se získáním API klíče, každopádně pokud se vám to povede, tak napište jak ste to udělali. Nejspíš to je v té sekci Access API. Napište jak jste tu službu aktivovali a jak jste získali klíč. Bude to pak lehčí i pro ty ostatní.
čtvrtek 5. února 2015
Hromadné stahování obrázků: Save images, Firebug
Aktualizováno 6. února 2014
V úvodním článku jsem se zmínil o pluginu do prohlížeče Mozilla Firefox zvaný Save images. Tento plugin vám umožňuje stáhnout obrázky, ale nejen to, umožňuje vám taky definovat pravidla přejmenování souboru. V tomto programu si můžete nastavit, které obrázky budou ze stránky stahovány. Můžete definovat podobu odkazu, který hledáte pomoci tzv. regulárního výrazu. Regulární výraz je zkratka, která slouží k vyhledání proměnlivých tvarů textových řetězců, ať už tím myslíme název souboru, název adresy, text, popisek apod. Jako příklad uvedu jeden z nejběžnějších regulárních výrazů, které lze použít když otvíráte soubor pod dialogovým oknem ve Windows. Do políčka pro název souboru napíšete *.jpg nebo *.txt podle toho jaký hledáte soubor. Zvolíte Otevřít nebo dáte Enter a zobrazí se vám pouze tyto soubory. Podobně když dáte obr*.jpg zobrazí se vám pouze ty obrázky, které začínají na text obr.
Nyní vám představím jak mám nastavený program Save images pokud si chci uložit obrázky z mapy.
Filters popisuje základní filtrování neboli hledání podle specifických vlastností obrazu a odkazu na obraz. Všimněte si, že jsem specifikoval i velikost souboru! Hledám soubor o rozměrech 256x256px. Takže nehrozí, že by mi program stáhl jiné obrázky. No není to skvělé?! Poslední položka je dlouhý název odkazu na obraz, respektive jeho proměnlivá forma definovaná regulárními výrazy. \d znamená digit (číslice) a {0,3} znamená že se může a nemusí opakovat maximálně třikrát. tečka {0,3} zase znamená že tam může být jakýkoliv znak o minimální délce 3 znaky a maximální délce 8 znaků. Konec není vidět, ale tak samo je to i u atributu z=nějaké číslo ... ještě to pokračuje. Musí se to přesně nadefinovat aby program naše daná čísla které jsem uvedl do závorek. To jsou čísla souřadnic a číslo LODu. Poznámka: Tvar odkazu se mohl změnit, takže nevím zda by dneska přesně seděl tak jak to bylo když jsem toto měl nastavené.
Zde nalezené číslice vkládám do názvu souboru. $číslo znamená že se mi tam dosadí obsah závorky z předchozí definice, viz první obrázek. Měli bychom dostat název souboru kde na začátku je sloupec neboli y, pak je tam podtržítko, pak řada neboli x. Ještě jednou opakuji, že číslice jsou přehozené kvůli přehlednému uspořádání v průzkumníku, když dáte zobrazit soubory podle koncovky. Poslední číslo je zoom.
Všimněte si první položky že jsem vypnul aby mi nevyskakovalo okno, pokaždé když zmáčknu zkratku na uložení souborů! Současně jsem zaškrtnul aby mi vyskakovali upozornění v pravé dolní části obrazovky.
A konečně poslední okno mi umožňuje, abych si nastavil zkratku ctrl+shift+s na příkaz ukládání souborů. Zmáčknete a soubory se automaticky uloží do složky kam ukládám obrázky. Ta by měla být nastavena ve Firefoxu: Možnosti/Obecné/Uložit všechny soubory do...
Soubor s přesným tvarem odkazů a regulárních bych mohl přidat příště.
Poznámka: stahováním obrázků se můžete dopouštět porušováním autorských práv, takže jaké obrázky budete ukládat a následky z toho plynoucí to je na Vás. Doporučuji vám abyste se zachovali diskrétně a nešířili internetem návod na stahování takových obrázků, ani takto stažené obrázky pokud jsou pod copyrightem. Na příkladu výše jsem pouze vysvětlil jak pracovat s regulárními výrazy a s programem Save images, abyste si mohli pohodlně uložit obrázky ke svému osobnímu použití.
K získání přesného tvaru odkazu lze použít plugin Firebug, který si nainstalujete do prohlížeče Firefox. Jiné prohlížeče jako Opera mají taky nějaký vývojářský nástroj, kterým můžete prozkoumat tělo stránky a zjistit jaké odkazy v něm jsou uvedené. Pokud stránka hojně využívá javascriptu jako například stránka napsaná pomoci Google Javascript API v3, tak nestačí pouze prohlédnout zdrojový kód stránky protože po načtení stránky stále běží Javascript který plynule obnovuje vzhled stránky podle toho co zrovna děláte. Přesný návod na použití pluginu Firefox je nad rámec tohoto tutorialu. Řeknu jen, že po nainstalování a restartování prohlížeče musíte zmáčknout klávesu F12 nebo otevřít okno Firebugu z nabídky Nástroje. V okně vlevo nahoře je malá ikona se čtverečkem a šipkou kurzoru. Na to když klinete tak můžete začít prozkoumávat strukturu html dokumentu (DOM) a zjišťovat co na ní je. Můžete mazat prvky ze stránky a tak odstranit části, které překrývají obrázky. Někdy totiž vidíte obrázek ale přes něj je položený ještě jiný objekt, který musíte smazat, abyste mohli kliknout na obrázek samotný (tag img). Když najdete obrázek a kliknete na něj ve Firebugu se vám zobrazí adresa obrázku, na kterou kliknete a zkopírujete si ji.
Aktualizováno: 6.2.2014
Důležité: Maps Javascript API v3
Právě jsem sepsal dokument, který popisuje jak si jednoduše vytvořit jednoduchou html aplikaci (obsahuje Maps Javascript API v3. Pokud si zvládnete na googlu založit účet a projekt Google Maps Javascipt API v3, nakonfigurovat svoji IP adresu a nakonfigurovat ten plugin tak máte vyhráno. IP adresu zjistíte tak že na googlu zadáte hledat "my IP".
Soubor zde obsahuje přesné regulární výrazy jak jsem již naznačil výše.
To je tak zatím vše co potřebujete k získání zdrojů (dále už budu používat jen výraz "prohlížení zdrojů"). Prostě tím, že si prohlížíte mapku v této aplikaci se ty soubory také nahrávají vám do počítače.
Aktualizace:
Napsal jsem článek ve kterém vysvětluji jak získat odkaz, potřebný pro vytvoření regulárního výrazu, viz můj článek odkázaný výše. Firebug - nalezeni odkazu na zdroj
V úvodním článku jsem se zmínil o pluginu do prohlížeče Mozilla Firefox zvaný Save images. Tento plugin vám umožňuje stáhnout obrázky, ale nejen to, umožňuje vám taky definovat pravidla přejmenování souboru. V tomto programu si můžete nastavit, které obrázky budou ze stránky stahovány. Můžete definovat podobu odkazu, který hledáte pomoci tzv. regulárního výrazu. Regulární výraz je zkratka, která slouží k vyhledání proměnlivých tvarů textových řetězců, ať už tím myslíme název souboru, název adresy, text, popisek apod. Jako příklad uvedu jeden z nejběžnějších regulárních výrazů, které lze použít když otvíráte soubor pod dialogovým oknem ve Windows. Do políčka pro název souboru napíšete *.jpg nebo *.txt podle toho jaký hledáte soubor. Zvolíte Otevřít nebo dáte Enter a zobrazí se vám pouze tyto soubory. Podobně když dáte obr*.jpg zobrazí se vám pouze ty obrázky, které začínají na text obr.
Nyní vám představím jak mám nastavený program Save images pokud si chci uložit obrázky z mapy.
Filters popisuje základní filtrování neboli hledání podle specifických vlastností obrazu a odkazu na obraz. Všimněte si, že jsem specifikoval i velikost souboru! Hledám soubor o rozměrech 256x256px. Takže nehrozí, že by mi program stáhl jiné obrázky. No není to skvělé?! Poslední položka je dlouhý název odkazu na obraz, respektive jeho proměnlivá forma definovaná regulárními výrazy. \d znamená digit (číslice) a {0,3} znamená že se může a nemusí opakovat maximálně třikrát. tečka {0,3} zase znamená že tam může být jakýkoliv znak o minimální délce 3 znaky a maximální délce 8 znaků. Konec není vidět, ale tak samo je to i u atributu z=nějaké číslo ... ještě to pokračuje. Musí se to přesně nadefinovat aby program naše daná čísla které jsem uvedl do závorek. To jsou čísla souřadnic a číslo LODu. Poznámka: Tvar odkazu se mohl změnit, takže nevím zda by dneska přesně seděl tak jak to bylo když jsem toto měl nastavené.
Zde nalezené číslice vkládám do názvu souboru. $číslo znamená že se mi tam dosadí obsah závorky z předchozí definice, viz první obrázek. Měli bychom dostat název souboru kde na začátku je sloupec neboli y, pak je tam podtržítko, pak řada neboli x. Ještě jednou opakuji, že číslice jsou přehozené kvůli přehlednému uspořádání v průzkumníku, když dáte zobrazit soubory podle koncovky. Poslední číslo je zoom.
Všimněte si první položky že jsem vypnul aby mi nevyskakovalo okno, pokaždé když zmáčknu zkratku na uložení souborů! Současně jsem zaškrtnul aby mi vyskakovali upozornění v pravé dolní části obrazovky.
A konečně poslední okno mi umožňuje, abych si nastavil zkratku ctrl+shift+s na příkaz ukládání souborů. Zmáčknete a soubory se automaticky uloží do složky kam ukládám obrázky. Ta by měla být nastavena ve Firefoxu: Možnosti/Obecné/Uložit všechny soubory do...
Soubor s přesným tvarem odkazů a regulárních bych mohl přidat příště.
Poznámka: stahováním obrázků se můžete dopouštět porušováním autorských práv, takže jaké obrázky budete ukládat a následky z toho plynoucí to je na Vás. Doporučuji vám abyste se zachovali diskrétně a nešířili internetem návod na stahování takových obrázků, ani takto stažené obrázky pokud jsou pod copyrightem. Na příkladu výše jsem pouze vysvětlil jak pracovat s regulárními výrazy a s programem Save images, abyste si mohli pohodlně uložit obrázky ke svému osobnímu použití.
K získání přesného tvaru odkazu lze použít plugin Firebug, který si nainstalujete do prohlížeče Firefox. Jiné prohlížeče jako Opera mají taky nějaký vývojářský nástroj, kterým můžete prozkoumat tělo stránky a zjistit jaké odkazy v něm jsou uvedené. Pokud stránka hojně využívá javascriptu jako například stránka napsaná pomoci Google Javascript API v3, tak nestačí pouze prohlédnout zdrojový kód stránky protože po načtení stránky stále běží Javascript který plynule obnovuje vzhled stránky podle toho co zrovna děláte. Přesný návod na použití pluginu Firefox je nad rámec tohoto tutorialu. Řeknu jen, že po nainstalování a restartování prohlížeče musíte zmáčknout klávesu F12 nebo otevřít okno Firebugu z nabídky Nástroje. V okně vlevo nahoře je malá ikona se čtverečkem a šipkou kurzoru. Na to když klinete tak můžete začít prozkoumávat strukturu html dokumentu (DOM) a zjišťovat co na ní je. Můžete mazat prvky ze stránky a tak odstranit části, které překrývají obrázky. Někdy totiž vidíte obrázek ale přes něj je položený ještě jiný objekt, který musíte smazat, abyste mohli kliknout na obrázek samotný (tag img). Když najdete obrázek a kliknete na něj ve Firebugu se vám zobrazí adresa obrázku, na kterou kliknete a zkopírujete si ji.
Aktualizováno: 6.2.2014
Důležité: Maps Javascript API v3
Právě jsem sepsal dokument, který popisuje jak si jednoduše vytvořit jednoduchou html aplikaci (obsahuje Maps Javascript API v3. Pokud si zvládnete na googlu založit účet a projekt Google Maps Javascipt API v3, nakonfigurovat svoji IP adresu a nakonfigurovat ten plugin tak máte vyhráno. IP adresu zjistíte tak že na googlu zadáte hledat "my IP".
Soubor zde obsahuje přesné regulární výrazy jak jsem již naznačil výše.
To je tak zatím vše co potřebujete k získání zdrojů (dále už budu používat jen výraz "prohlížení zdrojů"). Prostě tím, že si prohlížíte mapku v této aplikaci se ty soubory také nahrávají vám do počítače.
Aktualizace:
Napsal jsem článek ve kterém vysvětluji jak získat odkaz, potřebný pro vytvoření regulárního výrazu, viz můj článek odkázaný výše. Firebug - nalezeni odkazu na zdroj
středa 4. února 2015
Odebírání příspěvků blogu
Pokud chcete odebírat moje příspěvky je třeba se přihlásit na účet google. Nevím přesně jakým způsobem to funguje, protože sám v žádném odběru nejsem přihlášený, ale asi vám bude chodit informace na účet google (gmail.com). Ne že bych byl takovým zastáncem Googlu, to zase ne, jde jen o to, že některé věci s ním jsou praktické, jako třeba založení blogu. Je to snadný způsob jak napsat informativní článek. Ještě využívám služby Picasa, kde si můžete nahrávat fotky a taktéž tyto fotky snadno dávat na blog. Jinak ale email google nepoužívám, protože je to uložené v USA. Jelikož nemám rád když mi někdo čte emaily (například NSA) a sleduji moje osobní komunikaci a kontakty, tak gmailu se široce vyhýbám (Yahoo to samé). A doporučuji to všem ostatním co mají rádi soukromí.
Úvod k programu pro editaci textur
Už delší dobu jsem chtěl vytvořit program na úpravu textur či obrázků, který by zvládal hromadné editace a speciální akce či efekty na míru. Máme sice Photoshop a jiné programy s grafickou nástavbou, ty jsou ale klikací a v tomto smyslu editace obrázků v nich je pomalá. Mou představou je získat program, který dokáže přizpůsobit fotografie tak, aby vyhovovali mým složitým požadavkům na vzhled. Praktické využití textur by mělo být v leteckém simulátoru, pokud se povede projekt dokončit. Motivace by byla, ovšem tvorba jakéhokoliv programu je náročnou záležitostí a vyžaduje mnoho znalostí nejen programovacího jazyka jako takového, ale také znalosti tzv. knihoven, tedy doplňkových programů, přesněji řečeno funkcí bez kterých se komplikovanější program neobejde. V minulosti jsem přemýšlel o využití programu convert.exe neboli ImageMagick (zkratka IM). To je program který zvládá mnoho grafických efektů a triků. Tento program zvládá spoustu věcí jako například dokáže ze souboru pdf vyexportovat rastrové obrazy nebo vektorové letecké mapy. To jsem udělal když jsem chtěl používat letecké mapy ale ve formátu PDF mi to nevyhovovalo. Hlavním nedostatkem IM je mi přišla nízká rychlost především při rozmazávání obrázků a nízká efektivita operací. Abyste dosáhli jednoduchého efektu mnohdy musíte složitě aplikovat více úkonů abyste se dostali k tomu co chcete. IM je psaný v jazyce C++ což je jazyk, který používá třídy. Je sice sofistikovaný, ale programy v něm jsou hodně složité až je to někdy na úkor rychlosti. Můj program má být zaměřený na to, abych dosáhl přednostně toho co chci, na efektivitu a rychlost. Hlavní inspirací pro mě zůstává Photoshop. Musím však podotknout, že v mém případě se nebude jednat o grafický program, nýbrž program, který bude pracovat na bázi příkazového řádku. Takový program si můžete zahrnout do dávkového souboru, což je soubor spustitelný ve Windows pod konzolou CMD. Dávkový soubor lze editovat a připsat přesné příkazy přímo do něj. Abyste mohli můj program používat nezbude vám než se naučit používat jednotlivé argumenty. Přesto by vám měl můj program časem hahradit photoshop ve smyslu dávkových příkazů. Jelikož cesta k vytvoření takového programu je dlouhá, začínám svůj blog psát už teď, abyste byli průběžně informováni o tom s čím se nejspíš v programu setkáte.
Nechci se zaměřovat na podporu široké škály obrazových formátů ale postačil bych si s těmi třemi nebo čtyřmi základními.
Můj program by měl umět pracovat s obrazy v barevném režimu RGB, HSV, CMYK a s formáty PNG, JPG, BMP. Pro pochopení mého programu bude zásadní především barvový prostor HSV. Je to zkratka Hue, Saturation, Value. Jsou to tři složky na něž můžeme rozložit každou lidským okem viditelnou barvu nebo každý digitální obraz (kromě těch černobílých). Výhodou tohoto formátu je že se pomocí něj dá snadno vyznat v barvách, snadno se pomocí těchto tří složek míchají nebo nastavují barvy a snadno se nastavují podmínky pro to co v obrazu hledáme a co chceme upravit. Zatím nechci zabíhat moc do detailu, ale protože je to opravdu klíčová věc, už teď vám řeknu že Hue = odstín neboli zabarvení, Saturation = saturace neboli intenzita barvy a Value je složka která představuje tmavost nebo světlost barvy, dalo by se říct jas. Režim HSV je hodně podobný HSL (Hue, Saturation, Lightness) kde třetí složka představuje míru bílé čili svítivost (angl. luminocity). Podobně bychom mohli HSV vysvětlovat jako Hue, Saturation, Brightness což je výstižnější a vlastně i tato zkratka se používá. Pokud máte nainstalovaný Photoshop nebo Gimp či jiný podobný program, tak ho otevřete a studujte jak v něm nastavit barvu, jak najít barvu na obrázku a jak nastavit složky HSB nebo jak se složky HSB ve Photoshopu reflektují ve stupních a procentech, když přejíždíte kapátkem (tj. nástroj Photoshopu na výběr barev) po obrazu. Velkou výhodou Photoshopu je jeho snadný a rychlý způsob vybírání barev. Tak jako ve Photoshopu když používáte kapátko a používáte při tom klávesu shift, abyste mohli vybrat více barev například pomocí Color Range (Barvovým rozsahem), tak i můj program by měl umožnit specifikovat ty barvy se kterými chcete pracovat. Měl by umožnit tak jako Photoshop, pracovat s kanálama, maskama a vrstvama. Pokud toto umíte ve Photoshopu a víte čeho chcete dosáhnout, pak by to nemělo být tak těžké dosáhnout toho v mém programu. Pokud ještě stále nevíte co je to vrstva. Vrstva je obraz. Ve Photoshopu to je tak, že když položíte obraz a překryjete ho jiným obrazem, můžete docílit různých efektů buď pomocí blendingu nebo pomocí průsvitnosti. Blendingem může být například efekt, který spodní obraz ztmaví nebo zesvětlí podle obrazu, který leží nad ním. Horní obraz může tomu pod ním předat barvu (odstín), saturaci nebo světlo (svítivost - luminocity). V kombinaci s výběrem specifických barev na obrazu a těchto efektů můžete například potlačit stíny na fotografii, vytvořit jarní, podzimní nebo zimní textury.
Tolik zatím ke grafickým efektům. Jelikož mě vždycky bavila tvůrčí činnost, od grafiky až po tvorbu scenérií či scenérek do hry, tak na celý program pohlížím s nadhledem. Uvědomuji si, že jedna věc je vytvořit textury, druhá věc je být schopen organizovat velké množství různých textur tak, abychom se v nich neztratili. Chtěl bych tedy do programu zabudovat určité mechanismy, které by vaše obrazové soubory uměli přesunout do databáze souborů, tak, aby se s nimi pracovalo rychleji. Vzhledem k tomu, že v leteckém simulátoru pracujeme s tím čemu říkáme LODy, neboli čtverce, na které je rozdělena mapa, budu databáze dělit podle toho k jakému LODu se obrazy vztahují. Moje představa je taková, že by jeden LOD mohl obsahovat všechny textury týkající se přípravy projektu od LODu 18 až po LOD řekněme 7. Abyste rozuměli mým termínům přesněji. Zásadně používám slovo LOD pro vyznačení čtvercové plochy dané určitými standardy.
Podívejte se na tento odkaz:
Google maps coordinates - tile bounds projection
Slovo LOD je nutné rozlišovat od slova zoom. Zoomem jednoznačně rozumím přiblížení nebo taky rozlišení obrazu ve kterém je daná mapa. Najeďme si na čtverec Prahy o zoomu 9. Budeme-li chtít zpracovat takto velkou plochu budu mluvit o LODu 9, ale obrázky které budeme potřebovat jsou obrázky zoom 18. Když budete postupně přibližovat mapu pomocí kolečka na myši bude se vám daný čtverec rozdělovat na další a další LODy tedy menší oblasti, které bude třeba nejdříve získat než se dopravujeme k LODu 9. Zastavíme se tedy na Zoomu 18. V tuto chvíli je nám jasné jak velké množstí souborů potřebujeme. Už to máte spočítané? Je to 262144 souborů pro oblast LODu9. Pochopitelně, že tak velké množství souborů se nedá sehnat najednou. Google Javascript API v3 umožňuje zobrazit maximálně 25000 souborů za den. Pro zpracování nočních textur ale budeme potřebovat nejen ortophoto (soubory jpg) ale také obyčejnou mapku ve formátu png). Oblast LOD9 byste si teoreticky mohli prohlédnout na svém počítači za 20 dní. Nevím zda se to dá takto stihnout, je to jen teorie.
Slovo závěrem
Pokud se vám některé termíny zdali až příliš cizí, doporučuju si něco na internetu přečíst na dané téma, abyste byli v obraze. Třeba z Wikipedie. Často pomůžou obrázky. Asi napíšu článek na téma barevných prostorů jestli na to bude čas. Dokončení mého programu závisí na časových a jiných okolnostech. Času mám poměrně dost, ale zdraví už tolik ne, takže moje možnosti jsou omezené a nevím jak bych mohl pokrýt vytvoření kompletního manuálu k programu. Proto již nyní chci psát články, aby bylo jasné kam program směřuje a jak to jde kupředu nebo zda to vázne. Budete mít zatím dost času si udělat základní představu. Musím upozornit, že pro zvládnutí práce s texturama a tímto programem bude třeba mít více než jen základní schopnosti ovládání počítače. Budete potřebovat umět instalovat programy ručně, pracovat se složkama, vytvářet zástupce, orientovat se v souborech, umět si nastavit program Průzkumík tak, abyste viděli koncovky souborů (jak jinak byste poznali s jakými soubory pracujete?!). Kromě mého programu, by později měl být dodán nějaký script či program na práci s resample.exe, abyste si mohli složit svoji scenérku. Souřadnice a údaje potřebné by měli být vypočítány z názvu souboru. Což mi připomíná, že pokud nevíte kde sehnat zdroje dat, bude se vám hodit program (plugin) Save images, který je k dispozici pro prohlížeč Firefox. Tak pokud nemáte Firefox, tak si ho nainstalujte, najděte si Save images, ten si nainstalujte a zjistěte jak funguje. Je to program na hromadné stahování obrázků. Stačí nastavit klávesovou zkratku a jedete. A pokud se vám to nechce dělat ručně tak si ještě pořiďte program Autohotkey, dají se v tom vytvořit skripty či programy na zautomatizování určité činnosti (jako klikání myší a mačkání kláves), ale to probereme někdy v budoucnu.
Nechci se zaměřovat na podporu široké škály obrazových formátů ale postačil bych si s těmi třemi nebo čtyřmi základními.
Můj program by měl umět pracovat s obrazy v barevném režimu RGB, HSV, CMYK a s formáty PNG, JPG, BMP. Pro pochopení mého programu bude zásadní především barvový prostor HSV. Je to zkratka Hue, Saturation, Value. Jsou to tři složky na něž můžeme rozložit každou lidským okem viditelnou barvu nebo každý digitální obraz (kromě těch černobílých). Výhodou tohoto formátu je že se pomocí něj dá snadno vyznat v barvách, snadno se pomocí těchto tří složek míchají nebo nastavují barvy a snadno se nastavují podmínky pro to co v obrazu hledáme a co chceme upravit. Zatím nechci zabíhat moc do detailu, ale protože je to opravdu klíčová věc, už teď vám řeknu že Hue = odstín neboli zabarvení, Saturation = saturace neboli intenzita barvy a Value je složka která představuje tmavost nebo světlost barvy, dalo by se říct jas. Režim HSV je hodně podobný HSL (Hue, Saturation, Lightness) kde třetí složka představuje míru bílé čili svítivost (angl. luminocity). Podobně bychom mohli HSV vysvětlovat jako Hue, Saturation, Brightness což je výstižnější a vlastně i tato zkratka se používá. Pokud máte nainstalovaný Photoshop nebo Gimp či jiný podobný program, tak ho otevřete a studujte jak v něm nastavit barvu, jak najít barvu na obrázku a jak nastavit složky HSB nebo jak se složky HSB ve Photoshopu reflektují ve stupních a procentech, když přejíždíte kapátkem (tj. nástroj Photoshopu na výběr barev) po obrazu. Velkou výhodou Photoshopu je jeho snadný a rychlý způsob vybírání barev. Tak jako ve Photoshopu když používáte kapátko a používáte při tom klávesu shift, abyste mohli vybrat více barev například pomocí Color Range (Barvovým rozsahem), tak i můj program by měl umožnit specifikovat ty barvy se kterými chcete pracovat. Měl by umožnit tak jako Photoshop, pracovat s kanálama, maskama a vrstvama. Pokud toto umíte ve Photoshopu a víte čeho chcete dosáhnout, pak by to nemělo být tak těžké dosáhnout toho v mém programu. Pokud ještě stále nevíte co je to vrstva. Vrstva je obraz. Ve Photoshopu to je tak, že když položíte obraz a překryjete ho jiným obrazem, můžete docílit různých efektů buď pomocí blendingu nebo pomocí průsvitnosti. Blendingem může být například efekt, který spodní obraz ztmaví nebo zesvětlí podle obrazu, který leží nad ním. Horní obraz může tomu pod ním předat barvu (odstín), saturaci nebo světlo (svítivost - luminocity). V kombinaci s výběrem specifických barev na obrazu a těchto efektů můžete například potlačit stíny na fotografii, vytvořit jarní, podzimní nebo zimní textury.
Tolik zatím ke grafickým efektům. Jelikož mě vždycky bavila tvůrčí činnost, od grafiky až po tvorbu scenérií či scenérek do hry, tak na celý program pohlížím s nadhledem. Uvědomuji si, že jedna věc je vytvořit textury, druhá věc je být schopen organizovat velké množství různých textur tak, abychom se v nich neztratili. Chtěl bych tedy do programu zabudovat určité mechanismy, které by vaše obrazové soubory uměli přesunout do databáze souborů, tak, aby se s nimi pracovalo rychleji. Vzhledem k tomu, že v leteckém simulátoru pracujeme s tím čemu říkáme LODy, neboli čtverce, na které je rozdělena mapa, budu databáze dělit podle toho k jakému LODu se obrazy vztahují. Moje představa je taková, že by jeden LOD mohl obsahovat všechny textury týkající se přípravy projektu od LODu 18 až po LOD řekněme 7. Abyste rozuměli mým termínům přesněji. Zásadně používám slovo LOD pro vyznačení čtvercové plochy dané určitými standardy.
Podívejte se na tento odkaz:
Google maps coordinates - tile bounds projection
Slovo LOD je nutné rozlišovat od slova zoom. Zoomem jednoznačně rozumím přiblížení nebo taky rozlišení obrazu ve kterém je daná mapa. Najeďme si na čtverec Prahy o zoomu 9. Budeme-li chtít zpracovat takto velkou plochu budu mluvit o LODu 9, ale obrázky které budeme potřebovat jsou obrázky zoom 18. Když budete postupně přibližovat mapu pomocí kolečka na myši bude se vám daný čtverec rozdělovat na další a další LODy tedy menší oblasti, které bude třeba nejdříve získat než se dopravujeme k LODu 9. Zastavíme se tedy na Zoomu 18. V tuto chvíli je nám jasné jak velké množstí souborů potřebujeme. Už to máte spočítané? Je to 262144 souborů pro oblast LODu9. Pochopitelně, že tak velké množství souborů se nedá sehnat najednou. Google Javascript API v3 umožňuje zobrazit maximálně 25000 souborů za den. Pro zpracování nočních textur ale budeme potřebovat nejen ortophoto (soubory jpg) ale také obyčejnou mapku ve formátu png). Oblast LOD9 byste si teoreticky mohli prohlédnout na svém počítači za 20 dní. Nevím zda se to dá takto stihnout, je to jen teorie.
Slovo závěrem
Pokud se vám některé termíny zdali až příliš cizí, doporučuju si něco na internetu přečíst na dané téma, abyste byli v obraze. Třeba z Wikipedie. Často pomůžou obrázky. Asi napíšu článek na téma barevných prostorů jestli na to bude čas. Dokončení mého programu závisí na časových a jiných okolnostech. Času mám poměrně dost, ale zdraví už tolik ne, takže moje možnosti jsou omezené a nevím jak bych mohl pokrýt vytvoření kompletního manuálu k programu. Proto již nyní chci psát články, aby bylo jasné kam program směřuje a jak to jde kupředu nebo zda to vázne. Budete mít zatím dost času si udělat základní představu. Musím upozornit, že pro zvládnutí práce s texturama a tímto programem bude třeba mít více než jen základní schopnosti ovládání počítače. Budete potřebovat umět instalovat programy ručně, pracovat se složkama, vytvářet zástupce, orientovat se v souborech, umět si nastavit program Průzkumík tak, abyste viděli koncovky souborů (jak jinak byste poznali s jakými soubory pracujete?!). Kromě mého programu, by později měl být dodán nějaký script či program na práci s resample.exe, abyste si mohli složit svoji scenérku. Souřadnice a údaje potřebné by měli být vypočítány z názvu souboru. Což mi připomíná, že pokud nevíte kde sehnat zdroje dat, bude se vám hodit program (plugin) Save images, který je k dispozici pro prohlížeč Firefox. Tak pokud nemáte Firefox, tak si ho nainstalujte, najděte si Save images, ten si nainstalujte a zjistěte jak funguje. Je to program na hromadné stahování obrázků. Stačí nastavit klávesovou zkratku a jedete. A pokud se vám to nechce dělat ručně tak si ještě pořiďte program Autohotkey, dají se v tom vytvořit skripty či programy na zautomatizování určité činnosti (jako klikání myší a mačkání kláves), ale to probereme někdy v budoucnu.
Přihlásit se k odběru:
Komentáře (Atom)






