Programovací editor obrázkov - PDF na stiahnutie zadarmo
4 Prípravná úloha: vodorovné preklopenie obrázku Táto úloha je riešená na hodine. Cieľom je oboznámiť sa s rámcovým programom a triedami Picture a Pixel. Vytvorte triedu, ktorá horizontálne prevráti obrázok: Originálny obrázok horizontálne prevrátený Použite kópiu triedy ImageVerticalMirror. Nezabudnite vložiť túto triedu do hlavného programu v triede programu Spracovanie obrazu. Na otestovanie riešenia môžete tiež použiť svoje vlastné obrázky. 4

5 Príklad programu: Odstráňte červenú farbu V mnohých programoch, ako sú Adobe Photoshop, Microsoft Powerpoint a mnoho ďalších, sú farby často špecifikované ako zmes červených, zelených a modrých komponentov (RGB). Každá hodnota farby je v rozsahu, ktorý vedie k 2 ^ 8 * 2 ^ 8 * 2 ^ 8 = 2 ^ 24 = možných farbách. Krátky úvod do RGB nájdete na Wikipédii: Dva online programy na miešanie farieb nájdete pod: Uvažujme o programe, ktorý odstráni červenú farbu z obrázka: Originálny obrázok odstráni červenú Program ponechá štruktúru obrázka nezmenenú: Súradnice sa neprepočítavajú ako pri programe Mirror Image, ale prijímajú sa nezmenené. Hodnoty farieb zelenej a modrej sú prevzaté pre každý pixel, ale červená je vždy nastavená na 0: verejná trieda BildRotEremen implementuje verejnú úpravu obrázkov BildEdereitungInterface (obrázok pôvodný obrázok) < int breite = originalbild.getwidth(); int hoehe = originalbild.getheight(); Picture neuesbild = new Picture(breite, hoehe); for (int y = 0; y 6 for (int x = 0; x 7 Vorbereitende Aufgabe: Rot und Grün vertauschen Diese Aufgabe wird in der Klasse gelöst. Ziel ist es, das Rahmenprogramm und die Klassen Picture und Pixel kennenzulernen. Schreiben Sie ein Programm, das für jeden Bildpunkt die Farben Rot und Grün vertauscht (oder ähnliche Farbveränderungen vornimmt): Originalbild Rot und grün vertauscht Verwenden Sie dazu eine Kopie der Klasse BildRotSpiegeln. Denken Sie daran, diese Klasse im Hauptprogramm in der Klasse BildBearbeitungsprogramm einzufügen. Sie können auch eigene Bilder verwenden, um Ihre Lösung zu testen. 7
8 Spracovanie obrazu: Úlohy Vyriešte celkovo tri úlohy z piatich úloh:> Vyriešte úlohu 1 a úlohu 2. 2> Vyriešte jednu z úloh 3, 4, 5. Úloha 1: Otočenie obrázka o 90, 180 a 270 Napíšte tri programy na spracovanie obrazu: 1. Otočenie o 90 doprava [1 bod] 2. Otočenie o 180 (zodpovedá zrkadleniu bodu v strede) [3 body] 3. Otočenie o 270 doprava (zodpovedá otočeniu o 90 doľava) [1 bod] Hlavný program v Trieda programu na spracovanie obrázkov potom vyzerá takto: final String [] názvy obrazových súborov = < "goldengate.jpg"; final BildBearbeitungInterface[] bildbearbeiter = < new Bild90GradDrehen(), new Bild180GradDrehen(), new Bild270GradDrehen(); Selbstverständlich können Sie auch andere Bilder verwenden! Achten Sie einfach darauf, dass die Bilder maximal ca. 600x600 Pixel gross sind. 8
9 Cvičenie 2: Zmeny farieb na obrázku 1. Napíš program, ktorý prevádza farby obrázka na stupne šedej: [2 body] Originálny obrázok Obrázok v stupoch šedej Základné informácie o stupňoch šedej: Vzorec na prevod farieb RGB na stupne šedej: Môžete tiež Experimentujte s inými vzorcami pre hodnoty šedej - v závislosti od obrázka poskytuje iný vzorec jasnejšie hodnoty šedej. Ak počítate s hodnotami farieb, môžu vám pomôcť nasledujúce tipy: * Hodnoty farieb sú celé čísla. Napríklad ak chcete nastaviť červenú zložku každého pixelu na 20% pôvodnej hodnoty, môžete ju vypočítať takto: int novšia červená hodnota = (int) (originalpixel.getred () * 0,2); newpixel.setred (novšia červená hodnota); Násobenie parametra originalpixel.getred () s 0,2 = 20/100 poskytuje ako výsledok takzvané číslo s pohyblivou rádovou čiarkou. Napríklad, ak by červená hodnota pixelu bola 87, výsledok by bol. Pre novú červenú hodnotu však potrebujete znova celé číslo. Špecifikácia (int) po priradení pomocou = zabezpečí, že číslo s pohyblivou rádovou čiarkou sa prevedie na celé číslo. V tomto príklade môžete alternatívne napísať: 9
11 Cvičenie 3: Znížte veľkosť obrázka na polovicu [5 bodov] Napíšte program, ktorý vodorovne a zvisle zmenší polovicu obrázka na polovicu. Veľkosť obrázka na polovicu s interpoláciou Pôvodný obrázok Obrázok so štyrmi pixelmi by sa zmenšil na obrázok s jedným pixelom: obrázok pred pixelom 1 pixel 2 obrázok za pixelom pixel 3 pixely 4 Jednoduchým riešením je vynechať každý druhý stĺpec a každý druhý riadok. Farby pixelov v ilustrácii vpravo hore by potom jednoducho boli farbami pixelu 1 v ilustrácii vľavo hore. Kvalita obrazu však značne trpí. 1. Napíš program, ktorý implementuje tento jednoduchý postup. Sofistikovanejšie riešenie počíta farby pixelov na obrázku vpravo hore, pričom zohľadňuje niekoľko pixelov v pôvodnom obrázku, napríklad zohľadňuje zobrazené štyri pixely alebo zohľadňuje všetkých osem susedných pixelov. 2. Nájdite metódu, ktorá používa viac pixelov z pôvodného obrázka na zlepšenie kvality obrázka. Najlepším spôsobom, ako to urobiť, je experimentovať s rôznymi vzorcami na výpočet farieb nových pixelov. 11
12 Cvičenie 4: Zmena farieb v závislosti od polohy [5 bodov] Vytvorte program, ktorý mení hodnoty farieb pixelov v závislosti od ich polohy. Môžete napríklad skryť hodnotu farby zľava doprava, tj. Neustále znižovať novú hodnotu farby zo 100% pôvodnej hodnoty farby úplne zľava na 0% úplne doprava: Červená zložka pôvodného obrázka sa zmenší doprava Nasledujúce vzorce sú užitočné pre takéto výpočty (analógové vzorce môžu byť Použite ho pre smer Y): double deltax = orginalbild.getwidth () - orginalpixel.getx (); // ako ďaleko je pixel od pravého okraja? double percentdeltax = deltax/orginalbild.getwidth (); // Vzdialenosť pixela od pravého okraja v percentách Obrázok zo stredu môžete tiež stmaviť: 12
13 Originálny obrázok Obrázok je od stredu tmavší Užitočné vzorce: double deltax = Math.abs (originalBild.getWidth ()/x); // ako daleko je pixel od stredu? double percentdeltax = 1 - deltax/(originalbild.getwidth ()/2.0); // aké je percento pixelov vzdialených od stredu? Môžete tiež stmaviť obraz v horizontálnom a vertikálnom smere od stredu. Môžete tiež zvýšiť jas obrázka najviac v strede, čoraz menej k jeho okraju. Môžete však tiež zmeniť iba určitú časť obrázka. Napríklad, ak by ste fotili osobu s červenými očami, môžete znížiť jej hodnotu v oblasti červených očí. Súradnice môžete určiť pomocou rámcového programu. Môžete si zvoliť, ktorý efekt chcete vypočítať! 13
14 Úloha 5: Kreatívne spracovanie obrazu [5 bodov] S rámcovým programom ste dostali niekoľko efektov spracovania obrazu. Spustením triedy ImageEditingProgramAllEffects zobrazíte všetky efekty, ktoré už boli zadané. Tu je výber: Trieda ImageEdgeDiscover Trieda ImageSwirl Trieda ImageRotation (45 vľavo) Trieda ImagesSecondaryEditing s efektmi ImageRedRemove a ImageVerticalMirror Nájdite vhodný obrázok sami a napíšte efekt spracovania obrazu tak, aby bol výsledok vizuálne príťažlivý v najširšom slova zmysle! 14