Práce s pixely
S jednotlivými pixely rastru lze manipulovat prostřednictvím metody setRGB(int x, int y, int color). Metoda umožňuje nastavit pixelu zvolenou barvu, barva je vyjádřena prostřednictvím hodnoty int. Rastr se chová jako matice, x představuje řádkový index, y sloupcový index. Hodnotu bravy ve zvoleném pixelu lze získat metodou int getRGB(int x, int y), metoda vrací číslo typu int. Chceme -li získat hodnoty jednotlivých barevných složek, použijeme následující kód:c=getRGB(x,y);
int red = (c & 0x00ff0000) > > 16;
int green = (c & 0x0000ff00) > > 8;
int blue = c & 0x000000ff;
Velikost rastru lze zjistit metodami getWidht() a getHeight(). Používají se, pokud chceme v cyklu procházet rastrem po pixelech.
V následujícím příkladu otevřeme rastr nacházející se ve vzdáleném zdroji. Rastr zobrazíme, všem pixelům nastavíme hodnotu barevných složek následovně
Rnov = R/3, Gnov = G, Bnov = B/3. Načtení rastru provedeme v metodě loadImage().
public void loadPicture()
{
try
{
url=new URL("http://www.natur.cuni.cz/gis/tomas/1.jpg");
im=ImageIO.read(url);
}
catch (Exception e)
{
e.printStackTrace();
}
}
Pro získání hodnot barevných složek použijeme metodu getRGB(). Na základě požadavku zadání upravíme hodnoty barevných složek R a B, vytvoříme novou instanci třídy Color a pomocí getRGB() převedeme její hodnotu na číslo typu int, tuto hodnotu nastavíme pro pixel metodou setRGB().
public void editPicture()
{
for (int i=0;i<im.getWidth();i++)
{
for (int j=0;j<im.getHeight();j++)
{
int c=im.getRGB(i,j);
int red = (c & 0x00ff0000) > > 16;
int green = (c & 0x0000ff00) > > 8;
int blue = c & 0x000000ff;
red=red/3;
blue=blue/3;
Color ce=new Color(red,green,blue);
im.setRGB(i,j,ce.getRGB());
}
}
}
Autor: Filip Koval