Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Forelæsning Uge 3 – Torsdag

Lignende præsentationer


Præsentationer af emnet: "Forelæsning Uge 3 – Torsdag"— Præsentationens transcript:

1 Forelæsning Uge 3 – Torsdag
Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave: Raflebæger 3 (DieCup 3)

2 Om programmering Giv ikke op! – Hæng i! Programmering Faser Anderledes
Svær tankegang Faser Motivation Begejstring Tvivl? Frustration Eksistentiel krise Heureka! Fascination Indsigt Magt over teknologien Giv ikke op! – Hæng i! Tid Begejstring

3 ● Billedredigering Lysere Mørkere Inverteret Uskarpt

4 Billedrepræsentation
x Gråtoneværdi: Pixel (x,y)  [0..255] hvor 0 ~ sort og 255 ~ hvid width y height

5 én-til-mange relation
Billedredigering Vi bruger to klasser Image repræsenterer et billede og har metoder som arbejder på billedet, bl.a. brighten, darken, invert og blur Pixel repræsenterer en pixel og har metoder til at aflæse og sætte pixlens gråtoneværdi Image Pixel * én-til-mange relation public class Pixel { // returnerer gråtonen for denne pixel public int getValue() // opdaterer gråtonen for denne pixel public void setValue(int value) }

6 Class Image – interface
public class Image { // Returnerer billedets højde public int getHeight() // Returnerer billedets bredde public int getWidth() // Returnerer pixlen på position (x,y) public Pixel getPixel(int x, int y) // Returnerer en liste med samtlige pixels i billedet public ArrayList<Pixel> getPixels() // Returnerer de op til ni naboer til (x,y) (inklusiv (x,y)) public ArrayList<Pixel> getNeighbours(int x, int y) // Gentegner billedet public void pixelsUpdated() }

7 Skabelon for simpel billedbehandling
image Vi bruger en for-each løkke til at gennemløbe samtlige pixels og opdatere dem en efter en Rækkefølgen er ligegyldig for os Pixel Arrayliste p for ( Pixel p : image.getPixels() ) { int oldValue = p.getValue(); int newValue = ???; p.setValue(newValue); } beregn newValue ud fra oldValue

8 Brighten newValue = oldValue + 30 0 ~ sort, 255 ~hvid

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

10 Invert newValue = oldValue

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

12 Eksempler på billedoperationer
brighten Gør billedet lidt lysere  darken Gør billedet lidt mørkere invert Inverterer hver gråtone  blur Erstatter hver pixel med gennemsnittet af naboerne mirror Spejler billedet om den vertikale midterakse flip Spejler billedet om den horisontale midterakse rotate Roterer billedet 90 grader mod uret resize Skalerer billedet, så størrelsen ændres ClickerQuiz I den anden afleveringsopgave i uge 4 skal I implementere disse operationer

13 ● Arrays Arrays har et fast (på forhånd kendt) antal elementer
Ligner Collections, men er bygget direkte ind i Java sproget Findes også i de fleste andre programmeringssprog Skal ikke importeres 1. Erklæring (som feltvariabel) Kan også bruges på primitive typer private int[] hourCounts; 2. Initialisering (ofte i konstruktør) Antal af elementer kan defineres via et udtryk hourCounts = new int[24]; Eksempler på brug Udtrykket i […] skal evaluere til et heltal i intervallet [0,23] count = hourtCounts[hour]; hourCounts[hour]++; Antal elementer i {…} bestemmer størrelsen Erklæring og initialisering med værdier kan slås sammen private int[] monthLength = {31,28,31,30,…,30,31};

14 To metoder, der bruger et array
// Analyserer antal events indtruffet i hver klokketime public void analyzeHourlyData() { while (reader.hasMoreEntries()) { LogEntry entry = reader.nextEntry(); int hour = entry.getHour(); hourCounts[hour]++; } // Udskriver antal events indtruffet i hver klokketime public void printHourlyCounts() { System.out.println("Hr: Count"); for (int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]); }

15 For løkker brugt på arrays
Javas for-each løkke kan også bruges på arrays private String url; private String[] urls; for (String url : urls) { System.out.println(url); } For-løkken giver adgang til at bruge indexet for (int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]); } Det gør for-løkken ikke for (int value : hourCounts) { System.out.println( ???? + ": " + value); }

16 Forskelle på arrays og arraylister
Arrays har et fast (på forhånd kendt) antal elementer Simplere syntax for erklæring private int[] hourCounts; i stedet for private ArrayList<Integer> hourCounts; Arrays kan bruges på primitive typer (uden brug af wrapper klasse) Simplere syntax for initialisering hourCounts = new int[24]; i stedet for hourCounts = new ArrayList<Integer>(); Simplere syntax for kald hourCounts[13]; i stedet for hourCounts.get(13); Meget nemmere at håndtere flerdimensionale strukturer minuteCounts = new int[24][60]; secondCounts = new int[24][60][60]; Arrays er indbygget i Java sproget Giver mere effektiv implementering (hurtigere kode) og simplere syntax Kendt fra mange andre programmeringssprog Arrays er ikke en Collection type Pause

17 Eksempler på brug af arrays
Java API under ArrayList En arrayliste er en liste af elementer implementeret ved hjælp af et array I klassen Index har jeg Erklæret en feltvariabel Indsat fem Person objekter i arraylisten Klassen Person Feltvariabler: Klassen String En streng er en liste af tegn (char) Implementeret ved hjælp af et array private ArrayList<Person> list; private String name; private int age;

18 Lad os inspicere et objekt af klassen Index
Kan I tænke på andre situationer, hvor det vil være naturligt at bruge arrays?

19 Billedrepræsentation via arrays
j Pixel [ i ][ j ]  [0..255] hvor 0 ~ sort og 255 ~ hvid width i private Pixel[][] pixels; pixels = new Pixel[width][height]; height To dimensionalt array med width x height elementer

20 ClickerQuiz Skab et billede public class Image // Feltvariabler
private int width, height; private String title; private Pixel[][] pixels; ... // Konstruktør public Image(int width, int height, String title){ this.width = width; this.height = height; this.title = title; pixels = new Pixel[width][height]; // Lav alle pixels sorte for(int i=0; i < height; i++) { for(int j=0; j < width; j++) { pixels[i][j] = new Pixel( 0 ); } Reference til 2-dimensionalt array (af Pixels) j i width height Sort

21 Metoder til at aflæse pixels
// Returner pixlen i position(i,j) public Pixel getPixel(int i, int j){ return pixels[i][j]; } // Returnerer arrayliste med alle pixels i billedet public ArrayList<Pixel> getPixels(){ ArrayList<Pixel> result = new ArrayList<Pixel>(); for(int i=0; i < height; i++){ for(int j=0; j < width; j++){ result.add(pixels[i][j]); } return result; I en af afleveringsopgaver i uge 4 skal I arbejde med billedredigering I arbejder med arraylister Men "inde bagved" er billederne repræsenteret i 2-dimensionale arrays

22 Metode til at aflæse naboer
// Returnerer en arrayliste med alle naboer public ArrayList<Pixel> getNeighbours(int i,int j){ ArrayList<Pixel> result = new ArrayList<Pixel>(); for(int x = i-1; x <= i+1; x++){ for(int y = j-1; y <= j+1; y++){ addPixelToList(x,y,result); } return result; Vi skal tjekke om punktet (i,j) ligger indenfor billedet // Tilføj(i,j) til list, hvis (i,j) ligger indenfor billedet private void addPixel (int i, int j, ArrayList<Pixel> list){ if( 0 <= i && i < width && 0 <= j && j < height ){ list.add(pixels[i][j]); }

23 ● Afleveringsopgave: Raflebæger 3 (DieCup 3)
Vi skal endnu en gang arbejde videre med vores Raflebæger I skal lave noget mere aftestning Sammenligne slag fra to raflebægere, der har hhv. 3 og 4 terninger. Generalisere terningen, så den kan have et vilkårligt antal sider Skriv ny testmetode.

24 ● Opsummering Billedredigering Arrays
Forberedelse til afleveringsopgave i Uge 4 Arrays Fast (på forhånd kendt) antal elementer Bygget direkte ind i Java Giver mere effektiv adgang til de enkelte elementer Simplere syntax (uden brug af de normale metode kald) Afleveringsopgave: Raflebæger 3 (DieCup 3)

25 Det var alt for nu….. … spørgsmål


Download ppt "Forelæsning Uge 3 – Torsdag"

Lignende præsentationer


Annoncer fra Google