Limbajul JAVA – Aplicatii Grafice.Prelucrarea imaginilor

0
477
tutorial java
Limbajul JAVA – Aplicatii Grafice.Prelucrarea imaginilor
5 (100%) 2 votes

X.  Limbajul JAVA – Aplicatii Grafice.Prelucrarea imaginilor

 

1.  Grafica

Orice componenta vizuala are o suprafata grafica pe care se poate desena
Toate obiectele derivate din java.awt.Component au:

  • o functie paint() apelata automat
  • o functie repaint() apelabila de programator

Metoda paint() se apeleaza cand:

  • componenta apare prima data pe ecran
  • componenta este redimensionata
  • imaginea a fost alterata (prin suprapunerea altor ferestre, maximizare etc.).
  • starea componentei s-a modificat (ex apasarea pe un buton).

 

2.  Clasa Graphics

Clasa java.awt.Graphics gestioneaza orice suprafata de desenare
Metoda paint() primeste automat o referinta spre suprafata de desenare:

public void paint(Graphics g)

Clasa Graphics contine o serie de primitive de desenare fara umplere:

void draw3DRect(intx, inty, intwidth, intheight, booleanraised)
void drawArc(intx, inty, intwidth, intheight, intstartAngle, intangle)
void drawLine(intx1, inty1, intx2, inty2)
void drawOval(intx, inty, intwidth, intheight)
void drawPolygon(int[]xPoints, int[]yPoints, intnPoints)
void drawPolyline(int[]xPoints, int[]yPoints, intnPoints)
void drawRect(intx, inty, intwidth, intheight)
void drawRoundRect(intx, inty, intwidth, intheight, intarcW, intarcH)
void drawString(Stringstr, intx, inty)

Clasa Graphics contine o serie de primitive de desenare cu umplere:

void fill3DRect(intx, inty, intwidth, intheight, booleanraised)
void fillArc(intx, inty, intwidth, intheight, intstartAngle, intangle)
void fillOval(intx, inty, intwidth, intheight)
void fillPolygon(int[]xPoints, int[]yPoints, intnPoints)
void fillRect(intx, inty, intwidth, intheight)
void fillRoundRect(intx, inty, intwidth, intheight, intarcW, intarcH)

3.  Culoari

Pentru gestionarea culorii la afisare se foloseste clasa java.awt.Color
Constructor: Color( r, g, b, a), unde r,g,b (rosu, verde, albastru) pot fi de tip float sau intregi iar a –alfa specifica transparenta (poate lipsi)
Constante statice:

  • BLACK,
  • BLUE,
  • CYAN,
  • DARK_GRAY,
  • GRAY,
  • GREEN,
  • LIGHT_GRAY,
  • MAGENTA,
  • ORANGE,
  • PINK,RED,
  • WHITE,
  • YELLOW

Stabilirea culorii de desenare: g.setColor(Colorc)

4.  Fonturi

La afisare text se pot stabili diverse fonturi
Clasa java.awt.Font gestioneaza fonturile
Constructor: Font(Stringname, intstyle, intsize)

  • name: Arial, Courier, Helvetica etc.
  • style: Font.PLAIN, Font.BOLD, Font.ITALIC , sau combinatia “Font.BOLD | Font.ITALIC”
  • size: dimensiunea 8, 12, 16 etc.

Fonturile se pot obtine prin apelul metodelor din clasa: GraphicsEnvironment.getLocalGraphicsEnvironment():

  • Font[] getAllFonts()
  • String[] getAvailableFontFamilyNames()

5.  Selectie culoarea

Pentru selectia culorii in timpul rularii Java pune la dispozitie clasa JColorChooser
Selectia se face in mod direct, RGB sau HSB

JDialog dialog = new JDialog();
JColorChooser alegeCuloare = new JColorChooser();
Color culoareSelectata = alegeCuloare.showDialog(dialog, "Alegeti Culoarea", Color.WHITE);
if (culoareSelectata!= null) …

6.  Imagini

Pentru afisarea imaginilor se va folosi clasa Image
In mod obisnuit se foloseste BufferedImage pentru a avea acces la componentele RGB
Incarcarea unei imagini se face prin utilizarea unui gestionar MediaTraker
La un obiect de tip MediaTraker se pot adauga oricate imagini pentru a fi incarcate (prin addImage())
Pentru a astepta incarcarea unei imagini se apeleaza metoda waitForID()

Image image =
Toolkit.getDefaultToolkit().createImage(numeFisier);
mt.addImage(image, 0);
try {
mt.waitForID(0); // asteapta incarcarea imaginii
}
catch (InterruptedException ie) {
// intrerupere in timpul incarcarii
}
if (mt.isErrorID(0)) return null; // eroare la incarcare

7.  Prelucrarea unei imagini

Pentru prelucrarea imaginilor se folosesc clase din pachetul Java2D:

  • Pentru convolutie: ConvolveOp
  • Pentru transformari bazate pe tabele de transformare: LookupOp
  • Pentru filtrare bazata pe prag: ThresholdOp (se poate folosi fi LookupOp)

Operatiile se aplica asupra unui obiect de tip BufferedImage
Convolutia se bazeaza pe o matrice “nucleu”
Exemplu de matrice pentru un filtru de sharpening
0 -1 0
-1 5 -1
0 -1 0
Instantierea: new ConvolveOp(new Kernel( 3, 3, vectorValori_9elemente)

Prelucrarile bazate pe tabelele de transformare necesita crearea a unu sau trei vectori a 255 elemente fiecare ( pentru cele 3 componente RGB)
Exemplu pentru inversarea culorilor:

i->1..255, invert[i]=255-i;
operator = new LookupOp(
ShortLookupTable(0, invert), null)

NICIUN COMENTARIU

LĂSAȚI UN MESAJ