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 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 Programmering Giv ikke op – Fortvivl ikke Faser
Anderledes Svær tankegang Faser Motivation Begejstring Tvivl? Frustration Eksistentiel krise Heureka! Fascination Indsigt Magt over teknologien Giv ikke op – Fortvivl ikke Tingene ændrer sig hurtigt 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 Interface for Image klassen (signaturer)
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 med alle Pixels p for ( Pixel p : image.getPixels() ) { int oldValue = p.getValue(); int newValue = ???; p.setValue(newValue); } find værdien af p opdater p's værdi beregn ny værdi ud fra den gamle

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

9 ClickerQuiz 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); } ClickerQuiz 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 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 mange 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]++; } Pause // 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-each 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

17 Adressebog med personer
Et String objekt er implementeret ved et array: char [ ] Arraylisten er implementeret ved hjælp af et array: Object [ ]

18 Eksempler på brug af arrays
En arrayliste er en liste af objekter implementeret ved hjælp af et array Der er ubrugte elementer i arrayet, således at man kan indsætte nye elementer i arraylisten Når alle elementer er brugt udskiftes arrayet med et nyt (og større) En textstreng (objekt af typen String) er en liste af tegn (primitiv type char) implementeret ved hjælp af et array Kan I tænke på andre situationer, hvor det vil være hensigtsmæssigt at bruge arrays?

19 Billedrepræsentation via arrays
Gråtoneværdi: Pixel (x,y)  [0..255] hvor 0 ~ sort og 255 ~ hvid width j i To dimensionalt array private int[][] pixels = new int[width][height]; height Elementtypen er int Størrelsen er width x height

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

21 ● 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 Gammel // skaber terning med 6 sider Die(){…}; Forskellige konstruktører for Die Ny // skaber terning med n sider Die(int n){}; Overloadning Hedder det samme Forskellige parametre // skaber bæger med 2 terninger DieCup(){…}; Raflebæger 2 Forskellige konstruktører for DieCup // skaber bæger med n terninger DieCup(int n){…}; // skaber bæger hvor terninger har det antal sider som arraylistens elementer angiver DieCup(ArrayList<Integer> sides){…}; [6,8,5,6]

22 ● 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) I den anden afleveringsopgaver i uge 4 skal I arbejde med billedredigering I arbejder med arraylister Men "bagved kulisserne" er billederne repræsenteret i 2-dimensionale arrays

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


Download ppt "Forelæsning Uge 3 – Torsdag"

Lignende præsentationer


Annoncer fra Google