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)