12.07.2015 Views

Lacné grafické karty - Vitajte na stránkach www.einsty.hostujem.sk

Lacné grafické karty - Vitajte na stránkach www.einsty.hostujem.sk

Lacné grafické karty - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

P R O G R A M U J E M Ement funkcie Stop je èas, ktorý má uplynú v prehrávaní videa, aby sa <strong>sk</strong>ryl text danéhoprvku div. Vlastná funkcia Stop je jednoduchá:function Stop (Co, Kedy){if (Medium.currTimeState.activeTime>Kedy) Co.endElement();}Skontroluje èas aktivity objektu Medium (náš prvok media). Ak jeho èas prekroèil hod−notu v argumente Kedy, aktivita prvku div je ukonèená metódou endElement.SYNCHRONIZÁCIA. Opísané riešenie funguje, ale urèite tušíme, e takáto synchro−nizácia výpisu textu s videom je nešikovná. V názve odporúèania SMIL je slovo Synchro−nized. To dáva nádej, e jedným z cie¾ov normotvorcov bolo zabezpeèi synchronizáciumultimédií. Je to <strong>sk</strong>utoène tak. Prvok media môeme poui takto:Hodnotou true atribútu syncMaster urèujeme, e prvok media bude vystupova v rolemaster – hlavného prvku synchronizácie. Hodnotou locked atribútu syncBehavior urèuje−me, e sa má èaka <strong>na</strong> prípadné pozastavenie.Ak pouijeme tieto dva atribúty, vyhneme sa potrebe zamýš¾a sa <strong>na</strong>d svojimi vlastnými syn−chronizaènými funkciami, ako je uvedená funkcia Stop. Prvok seq a jeho det<strong>sk</strong>é prvky div sosprievodným textom môu by potom vo svojej pôvodnej podobe. Na zabezpeèenie synchro−nizácie je potrebné, aby náš prvok t:media a prvok t:seq so sprievodným textom mali spoloè−ného „èasovacieho“ rodièa. Môe ním by prvok t:par – zdruuje prvky s paralelne beiacimèasom. Kód cie¾ového riešenia nájdete <strong>na</strong> CD v súbore media9.html.INÉ MÉDIÁ. V <strong>na</strong>šom príklade sme riešili prehrávanie videa. Pouili sme prvok t:media.Rozpoz<strong>na</strong>nie druhu média sa u<strong>sk</strong>utoènilo pod¾a prípony wmv pouitého zdrojového súboru. VTIME sú definované viaceré synonymá pre prvok t:media. Mono poui aj názvy t:animation,t:audio, t:img, t:ref a t:video. Všetky tieto prvky majú rov<strong>na</strong>kú implementáciu. Ich pouitie saodporúèa pre lepšiu èitate¾nos programu. Tak aj v <strong>na</strong>šich príkladoch by sme <strong>na</strong>miesto t:mediamohli poui t:video.Imrich Buran<strong>sk</strong>ýProgramujeme v PHP / 10. èas: Grafika v PHP II.Na CD REVUE nájdete:zdrojové kódyPredošlá èas bola úvodom do pouívania kninice GD, vytvorenej <strong>na</strong> dy<strong>na</strong>mické ge−nerovanie grafiky priamo v <strong>sk</strong>ripte PHP. V tejto èasti si ukáeme, ako pracova s farbami.Ani v tomto smere nás kninica GD ne<strong>sk</strong>lame. Farby sa v HTML zadávajú v tvare RGB akoèasti troch základných farieb (èervenej, zelenej a modrej). Najvyššia povolená hodnotakadej z týchto troch farieb je 255 a <strong>na</strong>jnišia 0.ImageColorAllocate je <strong>na</strong>jdôleitejšia funkcia práce s farbami. Pouíva sa <strong>na</strong> priraïovaniefarieb jednotlivým objektom, obrázkom. Vyh¾adá prvý dostupný index farby v zadanom obráz−ku, <strong>na</strong>staví hodnoty èervenej, zelenej a modrej farby pod¾a zadania a vráti index poloky novejfarby v tabu¾ke. Pri vytváraní nového obrázka, respektíve pri prvom pouití tejto funkcie <strong>na</strong>sta−vujeme pozadie daného obrázka. Vracia sa identifikátor farby predstavujúci farbu <strong>sk</strong>ladajúcusa zo zloiek RGB. Argument obrazok sa vracia z funkcie ImageCreate(). FunkciuImageColorAllocate treba zavola pre kadú pouívanú farbu v danom obrázku.Int ImageColorAllocate(int obrazok, int cerve<strong>na</strong>, int zele<strong>na</strong>, int modra);ImageColorAt nám zistí farbu akéhoko¾vek bodu v danom, u existujúcom obrázku. Tátofunkcia vracia index farby pixla <strong>na</strong> mieste urèenom súradnicami x a y v obrázku obrazok.Int ImageColorAt(int obrazok, int x, int y);Pomocou tejto funkcie nie je problém <strong>na</strong>písa <strong>sk</strong>ript, ktorého úlohou by bolo zisti farbupozadia obrázka a automaticky prispôsobi farbu pozadia celej zobrazovanej stránky.ImageColorClosest je funkcia, ktorá nám dokáe urèi, èi obrázok obsahuje nejakúfarbu, prípadne aká farba v palete obrázka je tej <strong>na</strong>šej <strong>na</strong>jviac podobná. Na tento úèelmôeme poui funkciu ImageColorClosest a ImageColorExact.Int ImageColorClosest(int obrazok, int cerve<strong>na</strong>, int zele<strong>na</strong>, int modra);Funkcia vracia index farby v palete obrázka, ktorá je <strong>na</strong>jpodobnejšia zadanej hodnoteRGB. Podobnos medzi poadovanou farbou a kadou farbou v palete sa vypoèíta tak,ako keby jednotlivé farebné zloky RGB boli bodmi v trojrozmernom priestore. FunkciaImageColorClosest() preh¾adáva farby, ktoré v danom obrázku boli definované. Ak vobrázku ešte neboli alokované nijaké farby, vráti táto funkcia hodnotu −1.ImageColorExact vracia index zadanej farby, urèenej hodnotami RGB v palete obrázka. Aktakáto farba v palete neexistuje, je vrátená hodnota rovná −1.Zdrojový kód hovorí, e obrázok môe obsahova èervenú farbu. Ak áno, ušetrímejednu pozíciu v tabu¾ke farieb. Funkciou ImageColorExact sme sa ju pokúsili nájs priamo.Prvá podmienka zahàòa monos, e èervená v obrázku nie je. Vtedy ju môeme alokovafunkciou ImageColorAllocate. Ak nám došli farby, nájdeme si <strong>na</strong>jblišiu susednú farbu.Nakoniec vykreslíme èiaru z ¾avého horného rohu do pravého dolného. Daný obraz „vytla−èíme“ <strong>na</strong> monitor a uvo¾níme pamä.ImageColorResolve je podobná funkcia ako predchádzajúca. Umoòuje nám vyhnúsa nieko¾kým z uvedených krokov.Int ImageColorResolve(int obrazok, int cerve<strong>na</strong>, int zele<strong>na</strong>, int modra);Táto funkcia preh¾adá farby definované v danom obrázku a vráti index prvej farby shodnotami RGB zodpovedajúcimi poiadavke. Ak iad<strong>na</strong> farba nespåòa zadané kritériá,funkcia sa pokúsi alokova presnú farbu. Nikde však nie je <strong>na</strong>písané, e v tabu¾ke fariebbude vo¾né miesto. Vtedy funkcia ImageColorResolve vráti <strong>na</strong>jblišiu farbu. Tým je zabez−peèený typ vrátenej hodnoty, ktorý je vdy indexom farby. Predchádzajúci príklad v pre−písanej podobe s pomocou funkcie ImageColorResolve() bude vyzera takto:ImageColorSet pouijeme vtedy, ak chceme <strong>na</strong>hradi jednu farbu v celom obrázku inou.Bool ImageColorSet(int obrazok, int index, int cerve<strong>na</strong>, int zele<strong>na</strong>, int modra);Táto funkcia <strong>na</strong>stavuje zadaný index v palete <strong>na</strong> urèenú farbu. Je uitoèná pri vytváraníefektov podobných tým z ma¾ovania ☺. Výhodou je, e sa hodnota daného indexu <strong>na</strong>stavuje<strong>na</strong> farbu, ktorou má by výplò zobrazená. Tento proces nie je a taký nároèný ako vyplòovadaný objekt po pixloch. Ak takáto farba v palete neexistuje, bude vrátená hodnota −1.ImageColorsForIndex. Urèite ste si všimli, e spomí<strong>na</strong>né funkcie vracajú jediné celéèíslo, a nie tri hodnoty RGB. Hodnota vrátená týmito funkciami je farba v palete obrázka,take potrebujeme funkciu, ktorá zistí, o akú farbu <strong>sk</strong>utoène ide.Array ImageColorsForIndex(int obrazok, int index);Funkcia vráti asociatívne pole s k¾úèmi èervenej, zelenej a modrej zloky, samozrejme,v tvare RGB. Niekedy sa nám môe prida funkcia urèená <strong>na</strong> zistenie poètu farieb v pale−te zadaného obrázka ImageColorTotal(int obrazok).PREKLADANIE A PRÁCA S JEDNOTLIVÝMI PIXLAMI. Aj keï sa vám monozdá, e u sme vyèerpali všetky monosti práce s obrázkami, musím vás uisti, e to takani zïaleka nie je. Monosti, ktoré nám kninica GD v spojení s PHP dáva, vidíme aj v ïal−šej èasti. Môeme pracova s obrázkami <strong>na</strong> úrovni jednotlivých pixlov.ImageSetPixel nám umoòuje <strong>na</strong>stavi farbu ¾ubovo¾ného <strong>na</strong>mi zadaného pixla v ob−rázku. Funkcia kreslí pixel <strong>na</strong> x a y. V obrázku obrazok farbou farba.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!