Java - Práce s obrázky (65.díl)

Napsal O webu (») 25. 10. 2008 v kategorii Programování, přečteno: 3931×
obrazky/java_logo.png

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
Štítky: Java
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel dvanáct a dvanáct