csc1401 manipulating pictures. what we have done to date we have modified pictures by writing on top...
TRANSCRIPT
What we have done to date
We have modified pictures by writing on top of them
Using Turtles and using Graphics
Drawing lines, shapes and text, as well as inserting a picture into another picture
What would be nice to do
Changing colors on the picturesRed-eye reduction
Blending pictures
Doing other fancy Adobe Photoshop-like transformations
But this would be almost impossible to do by simply drawing on top of the existing picture
The Goal
Develop an easier approach to modifying our pictures by changing the pictures themselves rather than writing on top of them
Digital Pictures
Represented by pixelsWith a red, green, and blue value stored for each pixel
Stored in .jpg (JPEG) filesInternational standardWith lossy compression
Lossy means not all data is storedBut what is lost isn’t that important
Compression means made smaller
Other formats for storing digital pictures are GIF and BMP
Manipulating a Picture
To manipulate a picture we need to manipulate the pixels that make up the picture
Change the red, green, or blue values at the pixel
Pixel is a class created at Georgia TechEach pixel object has a red, green, and blue value
Pictures have lots of Pixels
How can we refer to each pixel?pixel1, pixel2, pixel3, pixel4, pixel5, …
Do we really want to name each one?On a 640 x 480 picture, there are 640 x 480 = 307,200 pixels
How do we change a Pixel?Pixel first;
first = stevepicture.getPixel(10,120); // 10 refers to the row and 120 to the column
first.setColor(Color.black); /* The book writes the code as:stevepicture.getPixel(10,100).setColor(Color.black); */
Note that if you have already shown the picture, by invoking: stevepicture.show();
You can cause the picture to be updated by: stevepicture.repaint();
What is an Array?
Storage for a sequence of items
Of the same type
You can access items by using an indexThe index starts at 0
The first item is at index 0The last item is at index (length – 1)
Arrays know their length (have a public length field)
arrayObj.length
3 7 9 2 1 5
8 3 2 6
0 1 2 3 4 5
0 1 2 3
Recall from Alice
In this example, each time through the loop, the bunny hopped
Note that the index variable changes from 0 to 1 to 2 to … each time through the loop. And we can take advantage of that when working with arrays!
In Java
Use a loop to access an array of pixels
The first time through the loop we access pixelArray[0]
The second time through the loop we access pixelArray[1]
…
What Data does a Picture Object Have?
A picture object has an array of pixel objects
That it read from the .JPG file
It knows the picture widthpictureObj.getWidth()
It knows the picture heightpictureObj.getHeight()
It knows how to return an array of pixelsPixel[] pixelArray = pictureObj.getPixels()
Pixel Objects
Each pixel has a red, green, and blue value
getRed(), getGreen(), getBlue()setRed(v), setGreen(v), setBlue(v)
Each pixel knows the location it was in the picture object
getX(), getY()
You can also get and set the color at the pixel
getColor(), setColor(color)
Turning all of the pixels in our picture to red – using a loop
Notes:
1) We have created a counter that starts at 0, and goes up to the number of pixels in the picture
2) Each pixel has its color set to red!
3) How would this code have looked had it been written as a method inside of the Picture class?
A note on Color
You can either set the red, green and blue amounts individually, or all together using mypixel.setColor(someColor)
You can create a color object by giving the red, green, and blue values for itColor colorObj = new Color(255,10,125);
Predefined Colors
The Color class has defined class constants for many colors
Color.red, Color.green, Color.blue, Color.black, Color.white, Color.yellow, Color.gray, Color.orange, Color.pink, Color.cyan, Color.magentaOr you can use all uppercase names
Color.RED, Color.BLUE, Color.BLACK, …
Getting and Setting Pixel Colors
To get a pixel’s color as a color objectColor color1 = pixelObj.getColor();
int red = color1.getRed();
int green = color1.getGreen();
int blue = color1.getBlue();
To set a pixel’s color using a new color objectred = 20;
green = 30;
blue = 100;
Color color2 = new Color(red,green,blue);
pixelObj.setColor(color2);
Changing Pixel Colors
There are two ways to change the color of a pixel in a picture
Set the red, green, and blue values individuallypixelObj.setRed(value), pixelObj.setGreen(value), pixelObj.setBlue(value),
Or set the colorpixelObj.setColor(colorObj)
But, you won’t see any change in the pictureUntil you ask it to repaint: pictureObj.repaint();Or you invoke the show method
Summary
Pictures have pixelsYou can change the picture by changing the color of the pixels
Arrays let you store and retrieve values of the same type using an indexYou can ask a picture for it’s width, height, and an array of pixelsYou can get and set the color of a pixel