Forelæsning 3.2 Billedredigering (bl.a. brug af for-løkker)

Slides:



Advertisements
Lignende præsentationer
Perspektiverende Datalogi Internetalgoritmer MapReduce Gerth Stølting Brodal.
Advertisements

Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Collectionklasser Klassifikation og anvendelse. Collections Motivation –hvorfor bruge collections? Realisering af en-til-mange relationer –Importer, erklær,
Introduktion til programmering
Forelæsning 3.1 Collections Javas for-each løkke
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
Plan Mini Java style guide Bouncing balls Debugger dIntProg, E10.
Lektion 7 Læsestof: Kopier fra Caranno
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
Bouncing Balls Brug af vektorer til modellering af hastighed og retning.
Forelæsning 2.2 Tilstand og opførsel (repetition)
Fundamentale sprogbegreber
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Repetition af dIntProg v/ Morten D. Bech. Tour de force Variabler Løkker Comparable ImErKo-reglen Eksamenssæt dIntProg, E13.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
Introduktion til programmering Kursusintroduktion Greenfoot.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Opsamling og repetition. Forelæsning 12 Hvad I ikke lærte Repetition? - date() - arrays - echo og return I funktioner - strukturering af script - navngivning.
Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn)
Sweep-algoritmer. DAIMIIntroducerende objektorienteret programmeringsweep.2 Datatypen Sequence Oprette Sequence() Sequence(s, l, h) Kopiere Sequence clone()
Introduktion til programmering Repetition - ArrayList.
Checklister Comparable og Comparator. dIntProg, E08Checklister.2 Checkliste for Comparable Antagelse –vi har en liste med elementer af typen T: List lst;
 Jens Bennedsen 2002Objektorienteret systemudvikling Design -> kode Mapning af et klassediagram til kode.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Introduktion til programmering Kursusoversigt. dIntProg, F08Kursusintroduktion.2 dIntProg Forelæsninger –Fire timer om ugen –Mandag samt fredag.
Introduktion til programmering Kursusoversigt. dIntProg, E08Kursusintroduktion.2 Mål (fra kursusbeskrivelsen) Deltagerne skal ved afslutning af kurset.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering Collections Samlinger af objekter.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Introduktion til programmering Repetition. dIntProg, F08Repetition.2 dIntProg Sidste forelæsning (12/10) –kort tilbagemelding på evaluering –repetition.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Billedbehandling – processering af digitale billeder.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Forelæsning Uge 2 – Torsdag Java syntax og style guide Sætninger –Simple sætninger (assignment, interne og eksterne metodekald) –Sammensatte sætninger.
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Forelæsning Uge 5 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 6 – Mandag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 3 – Mandag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 12 Protected access Abstrakte klasser og interfaces
Forelæsning Uge 4 – Mandag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 12 Abstrakte klasser og interfaces
Forelæsning Uge 4 – Mandag
Forelæsning Uge 4 – Torsdag
Forelæsning Uge 3 – Torsdag
Præsentationens transcript:

Forelæsning 3.2 Billedredigering (bl.a. brug af for-løkker) Mini Java style guide BlueJ’s Debugger Afleveringsopgave 4.1: Bouncing balls dIntProg, E14

Giv ikke op! – Hæng i! Om programmering Programmering Faser Anderledes Svær tankegang Faser Motivation Begejstring Tvivl Frustration Eksistensiel krise Heureka! Fascination Kompetencer Indsigt Magt over teknologien Tid Begejstring Giv ikke op! – Hæng i! dIntProg, E14

Billedredigering Lighten Darken Blur Invert dIntProg, E14

Billedrepræsentation x width Pixel (x, y)  [0..255] hvor 0 ~ sort, 255 ~hvid y height dIntProg, E14

Billedredigering * Vi bruger to klasser Image repræsenterer et billede og har metoder som arbejder på billedet, bl.a. lighten, darken, blur og invert. Pixel repræsenterer en pixel og har metoder til at aflæse og sætte pixel værdien Image Pixel * height dIntProg, E14

Class Image – interface public class Image { // returnerer billedets højde public int getHeight() // returnerer billedets bredde public int getWidth() // returnerer billedelementet på position (x,y) public Pixel getPixel(int x, int y) // returnerer en liste med samtlige pixels i billedet public List<Pixel> getPixels() // returnerer de op til ni naboer til (x,y) (inkl.(x,y)) public List<Pixel> getNeighbours(int x, int y) // gentegner billedet public void pixelsUpdated() } dIntProg, E14

Class Pixel – interface public class Pixel { // returnerer gråtonen for denne pixel public int getValue() // opdaterer gråtonen for denne pixel public void setValue(int value) } dIntProg, E14

Simpel billedbehandling image for ( Pixel p : image.getPixels() ) { int oldValue = p.getValue(); int newValue; // calculate newValue // from oldValue p.setValue(newValue); } Vi kender ikke rækkefølgen som pixels behandles i Det er ofte ikke nødvendigt p dIntProg, E14

Brighten newValue = oldValue + 30 dIntProg, E14

Brighten, Javakode image p for ( Pixel p : image.getPixels() ) { int oldValue = p.getValue(); int newValue; newValue = oldValue + 30; p.setPixel(newValue); } for ( Pixel p : image.getPixels() ) { p.setPixel(p.getValue()+30); } p Kan I se et potentielt problem? dIntProg, E14

Invert newValue = 255 - oldValue dIntProg, E14

Invert, Javakode image p for ( Pixel p : image.getPixels() ) { int oldValue = p.getValue(); int newValue; newValue = 255 – oldValue; p.setPixel(newValue); } for ( Pixel p : image.getPixels() ) { p.setPixel(255 - p.getValue()); } p dIntProg, E14

Koordinatbaseret gennemløb x width for (int y=0; y < image.height(); y++) { // behandl række y } y For (int y=0; y < image.height(); y++) { // behandl række y for (int x=0; x < image.width(); x++) { // behandl pixel(x,y) } height dIntProg, E14

Invert – koordinatbaseret public void invert() { // go through all pixels and // invert the colour value for(int y = 0; y < image.height(); y++) { for(int x = 0; x < image.width(); x++) { //behandl pixel(x,y) Pixel p = image.getPixel(x,y); int oldValue = p.getValue(); int newValue; newValue = 255 – oldValue; p.setValue(newValue); } // redisplay the image on screen image.pixelsUpdated(); dIntProg, E14

Invert – koordinatbaseret og kompakt //behandl pixel(x,y) Pixel p = image.getPixel(x, y); int oldValue = p.getValue(); int newValue; newValue = 255 – oldValue; p.setValue(newValue); //behandl pixel(x,y) image.getPixel(x,y).setValue(invert(x,y)); public int invert(int x, int y) { return 255 - image.getValue(x,y); } dIntProg, E14

newValue = gennemsnit af naboer Blur newValue = gennemsnit af naboer dIntProg, E14

Blur, koordinatbaseret og kompakt public Image blur() { Image result= new Image(image.getWidth(), image.getHeight(),"blurredImage”); for (int y = 0; y<image.getHeight(); y++) { for (int x = 0; x<image.getWidth(); x++) { result.getPixel(x,y).setValue(average(x,y)); } result.pixelsUpdated(); return result; public int average(int x, int y) { int sum = 0; for (Pixel p : image.getNeighbours(x,y)) { sum += p.getValue(); } return sum/image.getNeighbours(x,y).size(); dIntProg, E14

Eksempler på billedoperationer brighten Gør billedet lidt lysere   darken Gør billedet lidt mørkere blur Erstat hvert pixel med gennemsnitsværdien i det 3x3 kvadrat det er centrum i invert Inverter hver gråtone, dvs. 0 bliver til 255, 1 bliver til 254, 2 bliver til 253, etc. mirrorHor Spejlvend billedet omkring den horisontale midterakse mirrorVer Spejlvend billedet omkring den vertikale dIntProg, E14

Flere eksempler på billedoperationer frame Sæt en sort ramme omkring billedet Parameter: rammens bredde rotateLeft Rotér billedet 90 grader mod uret   rotateRight Rotér billedet 90 grader med uret crop Skær et rektangel ud af et billede og lav dette til et nyt billede Parametre: øverste venstre og nederste højre hjørne på crop-rektanglet threshold Sæt alle pixels der højst har tærskelværdien til 0 og alle pixels større end tærskelværdien til 255 Parameter: tærskelværdi  dIntProg, E14

Flere eksempler på billedoperationer add Læg et billede til et andet. Billeder adderes ved at addere værdierne for korresponderende pixels Parameter: et billede   subtract Træk et billede fra et andet oilPaint Erstat hvert pixel med den hyppigst forekommende værdi i det kvadrat det er centrum i Parameter: størrelsen på kvadratet osv. Den anden afleveringsopgaverne i uge 4 handler om billedbehandling dIntProg, E14

Mini Java Style Guide Navngivning Indrykning Klasser: med stort CamelCase eks.: Person, String, NumberDisplay, Variable og metoder: med lille camelCase eks.: firstName, trackName, displayString Indrykning Alt mellem {} rykkes ét ’hak’ ind For hvert ekstra niveau af {} rykkes endnu et ’hak’ ind., eks.: public class Person { private int age; public Person() { age = 32; } Husk at bruge editorens Auto-layout BlueJ styleguide: http://www.bluej.org/objects-first/styleguide.html dIntProg, E14

Hvad gør nedenstående kode? dIntProg, E14

Hvad gør nedenstående kode? Præcis det samme Den er bare næsten umulig at læse Husk at bruge editorens Auto-layout dIntProg, E14

BlueJ debugger (afluser = fejlfinder) Nyttig når man skal tjekke den detaljerede opførsel af noget Java kode Breakpoints indsættes (og fjernes) ved at klikke i venstre margin Under kørslen vil debuggeren stoppe, når et breakpoint nås, og vise positionen med en sort pil Herefter kan man ”steppe” gennem koden statement for statement dIntProg, E14

Metodekald Når man skal til at udføre et metodekald er der to muligheder: Udfører hele metodekaldet uden at man ser detaljerne Starter metode-kaldet, men stopper ved første statement i den kaldte metode dIntProg, E14

Metodekald Parat til at udføre første statement i den kaldte metode Andre knapper: Fortsætter kørslen frem til næste breakpoint Stopper kørslen Nødstop (uendelig while-løkke eller lignende) dIntProg, E14

Undervejs kan man inspicere Igangværende metodekald Feltvariables værdier Lokale variables værdier dIntProg, E14

Afleveringsopg 4.1: Bouncing Balls Greenfoot Brug af vektorer til modellering af hastighed og retning dIntProg, E14

Bolde og vektorer BallWorld Ball Vector Initialiserer verdenen til en passende størrelse Ball En bold der flyver rundt i verdenen og ’bouncer’ mod kanterne (opg. 3) andre bolde (opg. 4 – extra credit) Vector Repræsenterer boldens retning og hastighed Hver gang act kaldes af Greenfoot: x bestemmer hvor langt bolden skal flytte sig vandret (på x-aksen) y bestemmer hvor langt bolden skal flytte sig lodret (på y-aksen) dIntProg, E14

Animering – hvordan flytter bolden sig? Greenfoot kalder Ball’s act() metode act() kalder move() metoden move() får fat i boldens koordinater ved at kalde getX() og getY() (fra Actor) move() får fat i vel’s koordinater vha. vel.getX() og vel.getY() (fra Vector) move() opdaterer boldens position ved at kalde setLocation (fra Actor) :Ball vel:Vector act() move() getX() getY() getX() getY() setLocation(…) dIntProg, E14

Bouncing på kanterne Disse fire metoder skal checke om bolden rører ved en kant Efter kaldet til move skal kant-kollision håndteres Dette indkapsles i en metode handleWallCollision To tilfælde Hvis bolden rører ved en sidekant skal hastigheden vel sættes til vel.verticalFlip() Hvis bolden rører ved top eller bundkanten skal hastigheden vel sættes til vel.horizontalFlip() dIntProg, E14

Eksempel på kantcheck - hitRightWall() (0,0) getWorld().getHight() getY() getImage().getWidth() getWorld().getWidth() getX() getX() + getImage().getWidth()/2 > getWorld().getWidth()-1 dIntProg, E14

Opsummering Billedredigering Mini Java style guide BlueJ’s Debugger Brug af to forskellige slags for-løkker Mini Java style guide Navngivning Indrykning BlueJ’s Debugger Nyttigt værktøj til at finde fejl i kode Afleveringsopgave 4.1: Bouncing balls dIntProg, E14