Práce s obrázky
V programu často pracujeme s rastry. Java nativně pracuje s formáty JPG, PNG a GIF. Rastry mohou být připojovány jak z lokálního zdroje, tak ze vzdáleného počítače prostřednictvím URL. Metody pro práci s rastry nalezneme ve třídách ImageIO, BufferedImage, ImageIcon. Tato problematika je poměrně rozsáhlá, Java disponuje řadou nástrojů pro práci s rastry, omezíme se jen na velmi stručný popis základních možností, především s postupem pro načtení a uložení rastru. Práce s rastrem představuje zpravidla dva kroky: první tvoří jeho načtení, druhý jeho zobrazení.Načtení rastru
Načtení rastru lze provést několika způsoby. Ukážeme dvě varianty, první s využitím třídy BufferedImage, druhou s využitím třídy ImageIcon().Načtení nejprve provedeme z lokálně umístěného souboru. Nejprve vytvoříme instanci třídy fle a inicializujeme ji cestou k souboru. Připomeňme, že při zápisu cesty musíme používat dvojitá lomítka, při použití jednoho lomítka by se jednalo o ESCAPE sekvenci.
File f=new File(C:\\zajic.png);
Vytvoříme odkaz na instanci třídy BufferedImage
BufferedImage im;
Rastr načteme statickou metodou třídy ImageIO.read(File f) a inicializujeme s ním odkaz im.
im=ImageIO.read(f);
Druhou možnost představuje využití třídy ImageIcon. Vytvoříme novou instanci třídy ImageIcon, v konstruktoru ji inicializujeme souborem s rastrem, konstruktor očekává na vstupu objekt typu String. Metodou toString() získáme název souboru.
ImageIcon i=new ImageIcon(f.toString());
V dalším kroku vytvoříme odkaz na instanci třídy Image a inicializujeme ji prostřednictvím metody getImage() načteme rastr.
Image im=i.getImage();
Při načítání rastru ze vzdáleného zdroje vytvoříme novou instanci třídy URL, kterou inicializujeme odkazem na rastr.
url=new URL("http://adresa");
Další postup je stejný jako v předchozím případě
im=ImageIO.read(url);
Zobrazení rastru
Poté, co je rastr načten, je nutné ho zobrazit. Zpravidla se používá komponenta JPanel. Zobrazování rastru probíhá v předefnované metodě paintComponent() za použití metody drawImage(). Metoda je přetížena, je k dispozici celkem 6 prototypů této metody. Nejjednodušší varianta vypadá takto:boolean drawImage(Image img,int x,int y, ImageObserver observer)
Metoda neupravuje velikost rastru, rastr se na komponentu nemusí vejít celý, v takovém případě je zobrazena pouze levá horní část rastru. Pokud bychom chtěli rastr zobrazit celý, můžeme buď formulář zvětšit, nebo umístit JPanel na JScrollPane. Proměnná img představuje odkaz na načtený rastr, x, y souřadnice levého horního rohu rastru na komponentě, observer objekt, který je uvědoměn, je -li rastr načten. V našem případě bude kód pro vykreslení vypadat takto:
public void paintComponent(Graphics g)
{
g.drawImage(im,0,0,this);
}
Druhý prototyp, který uvedeme, obsahuje parametry width/height, které umožní stanovit novou velikost rastru. Rastr tedy můžeme dodatečně zvětšit či zmenšit.
boolean drawImage(Image img, int x, int y, int sirka, int vyska, ImageObserver observer)
Uložení rastru
Rastr můžeme uložit za použití statické metody ImageIO.write(). Její prototyp vypadá takto:write(RenderedImage im, String format, File soubor)
Autor: Filip Koval