Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
// Applikasjonens hoved-vindu 1 INSTITUTT FOR INFORMATIKK SVEIN BØE 3 // Geometrier/avstander/størrelser // Vis frem på skjermen // Hvis meny i toppen // Husk å komponere menyen JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("menu-title"); menuBar.add(menu); frame.setMenuBar(menuBar); frame.pack(); frame.setVisible(true); } // main } // GUI // Legg til visuelt element i container contentPane.add(new JLabel("lable-text")); Container contentPane = frame.getContentPane(); // Container for visuelle elementer public class GUI { public static main(String[] args) { JFrame frame = new JFrame("window title"); import java.awt.*; import javax.swing.*; SVEIN BØE Java i INF 160 GUI med Swing UNIVERSITETET I OSLO INSTITUTT FOR INFORMATIKK UNIVERSITETET I OSLO SVEIN BØE 2 INSTITUTT FOR INFORMATIKK SVEIN BØE • Læreboka: http://www.ifi.uio.no/inf160/Efford/ • Programmeringsguide for Java 2D: http://java.sun.com/j2se/1.4.1/docs/guide/2d/spec/ 4 • Java 2D: http://java.sun.com/docs/books/tutorial/2d/images/ • Java tutorial: http://java.sun.com/docs/books/tutorial/ • Java hjemmeside: http://java.sun.com/ Dokumentasjon UNIVERSITETET I OSLO INSTITUTT FOR INFORMATIKK • Java og bildebehandling i J2SE. BufferedImage m/venner. • Utplukk av Java (GUI, kode-konvensjon, polymorfisme, classpath, javadoc) Dagens tema • Introduksjon til bildebehandling • Få programmeringserfaring Mål med kurset UNIVERSITETET I OSLO SVEIN BØE 5 INSTITUTT FOR INFORMATIKK SVEIN BØE 7 Hver form krever separat kode! Ny form krever tillegg av kode! // Må ha separate arrays Circle[] circles; Rectangle[] rectangles; … double area = 0.0; for (int i = 0; i < circles.length; i++) { area += circles[i].area(); } for (int i = 0; i < rectangles.length; i++) { area += rectangles[i].area(); } public class Circle { double area() {...} double circumference() {…} } public class Rectangle { double area() {...} double circumference() {...} } Ulike metode-implementasjoner // Beregn totalt areal Separate klasser: Polymorfisme (dynamisk binding) UNIVERSITETET I OSLO INSTITUTT FOR INFORMATIKK • 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 UNIVERSITETET I OSLO SVEIN BØE area() circumference() area() circumference() INSTITUTT FOR INFORMATIKK Rectangle Circle SVEIN BØE area() circumference() Shape UML (Unified Modelling Language): Polymorfisme forts. UNIVERSITETET I OSLO INSTITUTT FOR INFORMATIKK 8 6 – 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 • Navnekonvensjonen viktigst, gir informasjon om funksjon Kode-konvensjon forts. UNIVERSITETET I OSLO SVEIN BØE SVEIN BØE area() circumference() area() circumference() INSTITUTT FOR INFORMATIKK Rectangle area() circumference() interface Shape 11 9 Dette virker pga polymorfisme! Ny form krever ikke tillegg av kode (bare klasse-definisjon av formen)! Circle UML-diagram: Polymorfisme forts. UNIVERSITETET I OSLO INSTITUTT FOR INFORMATIKK // Kan ha felles array (upcasting) Shape[] shapes; public class Shape { // Dummy -metoder (implementert): double area() {} double circumference() {} } public class Circle extends Shape { double area() {…} double circumference() {…} } public class Rectangle extends Shape { double area() {…} double circumference{…} } double area = 0.0; for (int i = 0; i < shapes.length; i++) { area += shapes[i].area(); } // Beregn totalt areal Superklasse med dummy-metoder: Polymorfisme forts. UNIVERSITETET I OSLO INSTITUTT FOR INFORMATIKK SVEIN BØE Konkrete sub-klasser: public class Circle extends Shape { double area() {...} double circumference() {...} } public class Rectangle extends Shape { double area() {...} double circumference() {...} } public abstract class Shape { // Ikke implementere metoder her abstract double area(); abstract double area(); } Superklasse med abstrakte metoder (abstrakt klasse): Polymorfisme forts. UNIVERSITETET I OSLO 10 12 Konkrete sub-klasser: public class Circle implements Shape { public double area() {...} public double circumference() {...} } public class Rectangle extends Shape { // Implementere metoder public double area() {...} public circumference() {...} } Merk: public metode-implementasjoner public interface Shape { double area(); double circumference(); } Interface: area() circumference() area() circumference() INSTITUTT FOR INFORMATIKK Rectangle SVEIN BØE area() circumference() abstract Shape Circle UML-diagram: Polymorfisme forts. UNIVERSITETET I OSLO 13 SVEIN BØE 15 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. 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. INSTITUTT FOR INFORMATIKK • • • • • Java 2D forts. UNIVERSITETET I OSLO SVEIN BØE 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” INSTITUTT FOR INFORMATIKK • • • • • Interface kan ikke inneholde data • Abstrakt klasse kan ikke instantieres • Abstrakt klasse kan definere metoder (både abstrakte og konkrete/implementerte) • Abstrakt klasse kan inneholde data Klasser og interface UNIVERSITETET I OSLO SampleModel DataBuffer Raster BufferedImage 14 INSTITUTT FOR INFORMATIKK SVEIN BØE 16 – 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. – 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. • Subklasser av ColorModel Java 2D forts. UNIVERSITETET I OSLO SVEIN BØE ColorModel Klasser for grafikk (fonter, plotting, farger, bilder) Klasser for bilder: BufferedImage, Raster, WritableRaster, SampleModel, ColorModel, DataBuffer INSTITUTT FOR INFORMATIKK • • Java 2D UNIVERSITETET I OSLO SVEIN BØE 17 INSTITUTT FOR INFORMATIKK SVEIN BØE 19 Hver komponent i classpath skal referere mor-katalogen til pakker, eks: /hom/inf160/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.1/docs/tooldocs/findingclasses.html • http://java.sun.com/products/jdk/1.4.1/docs/tooldocs/solaris/clas spath.html • Kanskje burde det heller hete packagepath? • Som opsjon til ”java” og ”javac” javac –classpath kolon-separert-path klassenavn.java Classpath forts. UNIVERSITETET I OSLO INSTITUTT FOR INFORMATIKK • 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); BufferedImage.TYPE_INT_RGB: DirectColorModel, 3x8-bit rgb // Unsigned byte gråtone-bilde med ComponentColorModel BufferedImage image = new BufferedImage(400, 300, BufferedImage.TYPE_BYTE_GRAY); Lage et BufferedImage // Unsigned byte bilde med IndexColorModel (farger) BufferedImage image = new BufferedImage(400, 300, BufferedImage.TYPE_BYTE_INDEXED); com Javadoc SVEIN BØE 18 INSTITUTT FOR INFORMATIKK SVEIN BØE • {@link navn synlig-tekst} kan brukes i setninger • @see klassenavn, eller @see klassenavn#metodenavn - ”Tags” for alle typer, bl.a. 20 • @throws klassenavn beskrivelse (synonym med @exception) • @return beskrivelse • @param navn beskrivelse - ”Tags” for metoder, bl.a. - ”Tags” for klasser og interfacer: @author navn (en tag for hver forfatter) - Brukes for klasser, interfacer, metoder og variable, skrives rett over - Kan inneholde tekst, html-kode og ”tags” (spesielle kode-ord) - Innledes med /**, avsluttes med */ (vanlige kommentarer: ”//” og ”/*…*/”) Kommentarer og tilhørende klasse-/metode-/variabel-navn gir html-filer. Dokumentasjons-kommentarer UNIVERSITETET I OSLO INSTITUTT FOR INFORMATIKK • ip.jar Anta at vi ”står” i /hom/kari/java. export CLASSPATH=.:/hom/inf160/Efford/Classes/ip.jar Hvis klassen ligger i com/pearsoneduc/ip/gui under Classes, kan vi i stedet bruke export CLASSPATH=.:/hom/inf160/Efford/Classes Source Classes Efford 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/inf160 Classpath Eksempler • UNIVERSITETET I OSLO UNIVERSITETET I OSLO