Download presentation
Presentation is loading. Please wait.
Published byGwenda Goodwin Modified over 9 years ago
1
NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009
2
NestedLoops-part42 Learning Goals Understand at a conceptual and practical level –How to copy one picture to another so that the first picture is rotated 90 degrees left or right –How to simplify a problem –How to come up with an algorithm to solve a problem –How to test the algorithm –How can you make a picture smaller or larger
3
NestedLoops-part43 Left Rotation How can you copy one picture onto another so that the first picture is rotated to the left 90 degrees?
4
NestedLoops-part44 Left Rotation First simplify the problem by thinking about how to copy when each pixel has just a number at it Can you come up with an algorithm for this? 123 456 36 25 14 012 0 1 0 0 1 1 2
5
NestedLoops-part45 Left Rotation Try out your algorithm on another example –Does it work? Can you translate it into code? 5678 1234 012 0 1 0 0 1 1 2 3 3
6
NestedLoops-part46 Left Rotation To rotate an image left 90 degrees still copy all the pixels –But they go to different locations in the target Column values become row values target x = source y target y = source width - 1 – source x 123 456 36 25 14 012 0 1 0 0 1 1 2
7
NestedLoops-part47 Left Rotation Algorithm Create the target picture object Invoke the method on the target picture –Create the source picture object –Loop through the source x Loop through the source y –Get the source pixel at the x and y values –Get the target pixel with the x equal the source y value and the y equal the source picture width – 1 minus the source x –Copy the color from the source pixel to the target pixel
8
NestedLoops-part48 Left Rotation Method public void copyKatieLeftRotation() { String sourceFile = FileChooser.getMediaPath("KatieFancy.jpg"); Picture sourcePicture = new Picture(sourceFile); Pixel sourcePixel = null; Pixel targetPixel = null; int targetX, targetY = 0; // loop through the columns for (int sourceX = 0; sourceX < sourcePicture.getWidth(); sourceX++) {
9
NestedLoops-part49 Copy Katie Left Rotation // loop through the rows for (int sourceY = 0; sourceY < sourcePicture.getHeight(); sourceY++) { // set the target pixel color to the source pixel color sourcePixel = sourcePicture.getPixel(sourceX,sourceY); targetX = sourceY; targetY = sourcePicture.getWidth() – 1 – sourceX; targetPixel = this.getPixel(targetX,targetY); targetPixel.setColor(sourcePixel.getColor()); }
10
NestedLoops-part410 Testing Left Rotation String file = FileChooser.getMediaPath( “ 7inX95in.jpg”); Picture p = new Picture(file); p.show(); p.copyKatieLeftRotation(); p.repaint();
11
NestedLoops-part411 Challenge Create a general left rotation method that –Works on any picture Call the method on the picture to be rotated left –Returns a new picture that is just the right size to hold the rotated picture Make the new picture's width the same as the old picture's height and the new picture's height the same as the old picture's width
12
NestedLoops-part412 Scaling You can make a picture smaller –Faster to download on the web Increment the source x and y by a number larger than 1 –Don’t use all the source pixels in the target picture You can make a picture larger –Show more detail Copy the same source x and y to more than one target x and y –Use source pixels more than once in target
13
NestedLoops-part413 Scaling Down a Picture passionFlower.jpg is 640pixels wide and 480 pixels high If we copy every other pixel we will have a new picture with width (640 / 2 = 320) and height (480 / 2 = 240) 0123 4567 891011 12131415 02 810
14
NestedLoops-part414 Scaling Down Algorithm Create the target picture Invoke the method on the target picture –Create the source picture –Loop with source x starting at 0 and target x starting at 0 as long as < source width Increment the source x by 2 each time through the loop, increment the target x by 1 Loop with source y starting at 0 and target y starting at 0 as long as < source height –Increment the source y by 2 each time through the loop, increment the target y by 1 »Copy the color from the source to target pixel
15
NestedLoops-part415 Scaling Down Method public void copyFlowerSmaller() { Picture flowerPicture = new Picture( FileChooser.getMediaPath(“passionFlower.jpg")); Pixel sourcePixel = null; Pixel targetPixel = null; // loop through the columns for (int sourceX = 0, targetX=0; sourceX < flowerPicture.getWidth(); sourceX+=2, targetX++) {
16
NestedLoops-part416 Scaling Down Method - Continued // loop through the rows for (int sourceY=0, targetY=0; sourceY < flowerPicture.getHeight(); sourceY+=2, targetY++) { sourcePixel = flowerPicture.getPixel(sourceX,sourceY); targetPixel = this.getPixel(targetX,targetY); targetPixel.setColor(sourcePixel.getColor()); }
17
NestedLoops-part417 Trying Copy Flower Smaller Create a new picture half the size of the original picture (+ 1 if odd size) –Picture p1 = new Picture(320,240); Copy the flower to the new picture –p1.copyFlowerSmaller(); Show the result –p1.show();
18
NestedLoops-part418 Thinking Through Scaling Up Copy each pixel in the source multiple times to the target –Source (0,0) Target (0,0) –Source (0,0) Target(1,0) –Source (1,0) Target(2,0) –Source (1,0) Target(3,0) –Source (2,0) Target(4,0) –Source (2,0) Target(5,0) –Source (0,0) Target(0,1) –Source (0,0) Target(1,1) 112233 112233 445566 445566 123 456 0 0 1 12 0 0 1 1 2 2 3 3 45
19
NestedLoops-part419 Scaling Up Algorithm Create the target picture Invoke the method on the target picture –Create the source picture –Loop with source x starting at 0 and target x starting at 0 as long as < source width Increment the source x by 0.5 each time through the loop, increment the target x by 1 Loop with source y starting at 0 and target y starting at 0 as long as < source height –Increment the source y by 0.5 each time through the loop, increment the target y by 1 »Copy the color from the source to target pixel
20
NestedLoops-part420 Scaling Up Exercise Write a method copyFlowerBigger to scale up the picture flower1.jpg when you copy it to 640x480.jpg Save the result to a file using –pictureObj.write(“file”);
21
NestedLoops-part421 Summary To copy one picture to another with the first picture rotated –You need to change the targetX and targetY You should simplify a problem –And try to solve it by hand –Then come up with an algorithm for solving it –And then try it on another example To scale a picture down use every other pixel –To scale a picture up use every pixel more than once
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.