Mål med kurset Introduksjon til bildebehandling Få programmeringserfaring Java i INF 2310 Dagens tema Utplukk av Java (GUI, kode-konvensjon, polymorfisme, classpath, javadoc) Java og bildebehandling i J2SE. BufferedImage m/venner. INSTITUTT FOR INFORMATIKK SVEIN BØE 1 INSTITUTT FOR INFORMATIKK SVEIN BØE 2 GUI med Swing import java.awt.*; import javax.swing.*; public class GUI { public static main(string[] args) { JFrame frame = new JFrame("window title"); // Applikasjonens hoved-vindu Container contentpane = frame.getcontentpane(); // Container for visuelle elementer contentpane.add(new JLabel("lable-text")); // Legg til visuelt element i container JMenuBar menubar = new JMenuBar(); // Hvis meny i toppen JMenu menu = new JMenu("menu-title"); // Husk å komponere menyen menubar.add(menu); frame.setmenubar(menubar); Dokumentasjon Java hjemmeside: http://java.sun.com/ Java tutorial: http://java.sun.com/docs/books/tutorial/ Java 2D: http://java.sun.com/docs/books/tutorial/2d/images/ Programmeringsguide for Java 2D: http://java.sun.com/j2se/1.4.2/docs/guide/2d/spec/ Læreboka: http://www.ifi.uio.no/~inf2310/efford/ frame.pack(); // Geometrier/avstander/størrelser frame.setvisible(true); // Vis frem på skjermen // main // GUI INSTITUTT FOR INFORMATIKK SVEIN BØE 3 INSTITUTT FOR INFORMATIKK SVEIN BØE 4
Kode-konvensjon http://java.sun.com/docs/codeconv/ Hvorfor? Gjøre koden mer lesbar for andre Vedlikehold utgjør 80% av kostnadene ved koding Vedlikehold gjøres ofte av andre. Ikke tilstrekkelig at DU liker din stil. Kode-konvensjon forts. Navnekonvensjonen viktigst, gir informasjon om funksjon class: Substantiv, stor forbokstav for hvert del-ord (ikke bruk _ ). Unngå sjeldne akronymer og forkortelser. Eks: ImageSelector, BufferedImage Interface: Som for klasser. Eks: ImageDecoder Metoder: Verb, ellers som for klasser, men liten første-bokstav Eks: addchangelistener, getcontentpane. Variable: Form som for verb. Unngå en-bokstav navn (unntatt vanlig bruk av i,j,k (int) og c,d (tegn) Klasse-konstanter (static final): Store bokstaver, del-ord adskilt med _. Eks: TWO_PI INSTITUTT FOR INFORMATIKK SVEIN BØE 5 INSTITUTT FOR INFORMATIKK SVEIN BØE 6 Polymorfisme (dynamisk binding) Separate klasser: public class { double {... double { public class { double {... double {... Ulike metode-implementasjoner // Beregn totalt areal // Må ha separate arrays [] circles; [] rectangles; double area = 0.0; for (int i = 0; i < circles.length; i++) { area += circles[i].; for (int i = 0; i < rectangles.length; i++) { area += rectangles[i].; UML (Unified Modelling Language): Shape Hver form krever separat kode! Ny form krever tillegg av kode! INSTITUTT FOR INFORMATIKK SVEIN BØE 7 INSTITUTT FOR INFORMATIKK SVEIN BØE 8
Superklasse med dummy-metoder: public class Shape { // Dummy-metoder (implementert): double { double { public class extends Shape { double { double { public class extends Shape { double { double circumference{ // Beregn totalt areal // Kan ha felles array (upcasting) Shape[] shapes; double area = 0.0; for (int i = 0; i < shapes.length; i++) { area += shapes[i].; Ny form krever ikke tillegg av kode (bare klasse-definisjon av formen)! Dette virker pga polymorfisme! UML-diagram: abstract Shape INSTITUTT FOR INFORMATIKK SVEIN BØE 9 INSTITUTT FOR INFORMATIKK SVEIN BØE 10 UML-diagram: interface Shape Superklasse med abstrakte metoder (abstrakt klasse): public abstract class Shape { // Ikke implementere metoder her abstract double ; abstract double ; Konkrete sub-klasser: public class extends Shape { double {... double {... public class extends Shape { double {... double {... Interface: public interface Shape { double ; double ; Konkrete sub-klasser: public class implements Shape { public double {... public double {... public class implements Shape { // Implementere metoder public double {... public {... Merk: public metode-implementasjoner INSTITUTT FOR INFORMATIKK SVEIN BØE 11 INSTITUTT FOR INFORMATIKK SVEIN BØE 12
Klasser og interface Abstrakt klasse kan ikke instantieres Abstrakt klasse kan definere metoder (både abstrakte og konkrete/implementerte) Abstrakt klasse kan inneholde data Java 2D Klasser for grafikk (fonter, plotting, farger, bilder) Klasser for bilder: BufferedImage, Raster, WritableRaster, SampleModel, ColorModel, DataBuffer BufferedImage Interface kan ikke inneholde data Interface kan inneholde konstanter (static final) Interface kan inneholde (abstrakte) metoder Klasser kan implementere interface eller deler av det Objekter av sub-klasser kan upcastes Raster DataBuffer SampleModel ColorModel INSTITUTT FOR INFORMATIKK SVEIN BØE 13 INSTITUTT FOR INFORMATIKK SVEIN BØE 14 Java 2D forts. BufferedImage inneholder fullstendig beskrivelse av bilde, dvs. pikselverdier og hvilke farger de representerer. Metoder: getheight, getwidth, gettype, getraster m.fl. Raster beskriver pikselverdiene. Readonly. Metoder: getheight, getwidth, getpixel, getsample m.fl. WritableRaster metoder: setpixel, setsample m.fl. DataBuffer inneholder pikselverdiene som er bygget opp av sampler. Et eller flere arrays. Organiseringen av samplene er gitt av SampleModel, for eksempel rgbrgbrgb eller rrrgggbbb. ColorModel beskriver mapping fra sampler til farger. Ikke nødvendigvis en-til-en mellom sampler og fargekomponenter. Java 2D forts. Subklasser av ColorModel ComponentColorModel For piksler med separate sampler for hver fargekomponent, samplene lagret separat. En-til-en. DirectColorModel For piksler med separate sampler for hver fargekomponent, samplene for ett piksel lagret i samme data-element. En-til-en. Tilsvarer X11 TrueColor. Typisk for rgb fargebilder. IndexColorModel For piksler med kun ett sample som er indeks i fargetabell. Tabellen gir mengden av hver primærfarge (8 bit). Tilsvarer X11 PseudoColor. Typisk for gråtonebilder. INSTITUTT FOR INFORMATIKK SVEIN BØE 15 INSTITUTT FOR INFORMATIKK SVEIN BØE 16
Eksempler Lage et BufferedImage // Unsigned byte bilde med IndexColorModel (farger) BufferedImage image = new BufferedImage(400, 300, BufferedImage.TYPE_BYTE_INDEXED); // Unsigned byte gråtone-bilde med ComponentColorModel BufferedImage image = new BufferedImage(400, 300, BufferedImage.TYPE_BYTE_GRAY); BufferedImage.TYPE_INT_RGB: DirectColorModel, 3x8-bit rgb BufferedImage.TYPE_3BYTE_BGR: ComponentColorModel, 3x8-bit rgb Manipulere pikselverdier WritableRaster raster = image.getraster(); value = raster.getsample(x, y, 0); raster.setsample(xx, yy, 0, value); Classpath Java leter etter klasser i henhold til classpath, eks: export CLASSPATH=path1:path2: Anta programmet TestClass.java i /hom/kari/java skal bruke klassen ImageSelector fra pakken com.pearsoneduc.ip.gui og at klassen ligger i ip.jar /hom/inf2310 Efford Classes Source ip.jar com Javadoc Anta at vi står i /hom/kari/java. export CLASSPATH=.:/hom/inf2310/Efford/Classes/ip.jar Hvis klassen ligger i com/pearsoneduc/ip/gui under Classes, kan vi i stedet bruke export CLASSPATH=.:/hom/inf2310/Efford/Classes INSTITUTT FOR INFORMATIKK SVEIN BØE 17 INSTITUTT FOR INFORMATIKK SVEIN BØE 18 Classpath forts. Hver komponent i classpath skal referere mor-katalogen til pakker, eks: /hom/inf2310/efford/classes for å finne klasser i pakken com.pearsoneduc.ip.gui. Rekkefølgen av komponenter i classpath har betydning. Default classpath (dvs hvis tom) er. (nåværende katalog). http://java.sun.com/j2se/1.4.2/docs/tooldocs/findingclasses.html http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/classpath.ht ml Kanskje burde det heller hete packagepath? Som opsjon til java og javac javac classpath kolon-separert-path klassenavn.java Dokumentasjons-kommentarer Kommentarer og tilhørende klasse-/metode-/variabel-navn gir html-filer. - Innledes med /**, avsluttes med */ (vanlige kommentarer: // og /* */ ) - Kan inneholde tekst, html-kode og tags (spesielle kode-ord) - Brukes for klasser, interfacer, metoder og variable, skrives rett over - Tags for klasser og interfacer: @author navn (en tag for hver forfatter) - Tags for metoder, bl.a. @param navn beskrivelse @return beskrivelse @throws klassenavn beskrivelse (synonym med @exception) - Tags for alle typer, bl.a. @see klassenavn, eller @see klassenavn#metodenavn {@link navn synlig-tekst kan brukes i setninger INSTITUTT FOR INFORMATIKK SVEIN BØE 19 INSTITUTT FOR INFORMATIKK SVEIN BØE 20