<< Chapter < Page | Chapter >> Page > |
A complete listing of the program discussed in this module is provided in Listing 5 below.
Listing 5 . Complete program listing. |
---|
/*File Prob04 Copyright 2008 R.G.Baldwin
*********************************************************/import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;import java.awt.geom.Rectangle2D;
import java.awt.Graphics;import java.awt.geom.Ellipse2D;
import java.awt.Color;public class Prob04{
public static void main(String[]args){
new Prob04Runner().run();}//end main method
}//end class Prob04//======================================================//
class Prob04Runner{public Prob04Runner(){
System.out.println("Display your name here.");}//end constructor
//----------------------------------------------------//public void run(){
Picture pix = new Picture("Prob04a.jpg");//Rotate and mirror the picture.
pix = rotatePicture(pix,35);pix = mirrorUpperQuads(pix);
pix = mirrorHoriz(pix);pix.explore();
//Clip the picture to an ellipse on a red background.pix = clipToEllipse(pix);
//Add your name and display the output picture.pix.addMessage("Display your name here.",10,20);
pix.explore();System.out.println(pix);
}//end run//----------------------------------------------------//
private Picture clipToEllipse(Picture pix){Picture result =
new Picture(pix.getWidth(),pix.getHeight());result.setAllPixelsToAColor(Color.RED);
//Get the graphics2D objectGraphics2D g2 = (Graphics2D)(result.getGraphics());
//Create an ellipse for clippingEllipse2D.Double ellipse =
new Ellipse2D.Double(28,64,366,275);//Use the ellipse for clipping
g2.setClip(ellipse);//Draw the image
g2.drawImage(pix.getImage(),0,0,pix.getWidth(),pix.getHeight(),
null);return result;
}//end clipToEllipse//----------------------------------------------------//private Picture rotatePicture(Picture pix,
double angle){//Set up the rotation transform
AffineTransform rotateTransform =
new AffineTransform();rotateTransform.rotate(Math.toRadians(angle),
pix.getWidth()/2,pix.getHeight()/2);
//Get the required dimensions of a rectangle that will// contain the rotated image.
Rectangle2D rectangle2D =pix.getTransformEnclosingRect(rotateTransform);
int resultWidth = (int)(rectangle2D.getWidth());int resultHeight = (int)(rectangle2D.getHeight());
//Set up the translation transform that will translate// the rotated image to the center of the new Picture
// object.AffineTransform translateTransform =
new AffineTransform();translateTransform.translate(
(resultWidth - pix.getWidth())/2,(resultHeight - pix.getHeight())/2);
//Concatenate the two transforms so that the image// will first be rotated around its center and then
// translated to the center of the new Picture object.translateTransform.concatenate(rotateTransform);
//Create a new Picture object to contain the results// of the transformation.
Picture result = new Picture(resultWidth,resultHeight);
//Get the graphics context of the new Picture object,// apply the transform to the incoming picture and
// draw the transformed picture on the new Picture// object.
Graphics2D g2 = (Graphics2D)result.getGraphics();g2.drawImage(pix.getImage(),translateTransform,null);
return result;}//end rotatePicture
//----------------------------------------------------////This method mirrors the upper-left quadrant of a
// picture into the upper-right quadrant.private Picture mirrorUpperQuads(Picture pix){
Pixel leftPixel = null;Pixel rightPixel = null;
int midpoint = pix.getWidth()/2;int width = pix.getWidth();
for(int row = 0;row<pix.getHeight()/2;row++){
for(int col = 0;col<midpoint;col++){
leftPixel = pix.getPixel(col,row);rightPixel =
pix.getPixel(width-1-col,row);rightPixel.setColor(leftPixel.getColor());
}//end inner loop}//end outer loop
return pix;}//end mirrorUpperQuads
//----------------------------------------------------////This method mirrors the top half of a picture into
// the bottom half.private Picture mirrorHoriz(Picture pix){
Pixel topPixel = null;Pixel bottomPixel = null;
int midpoint = pix.getHeight()/2;int height = pix.getHeight();
for(int col = 0;col<pix.getWidth();col++){
for(int row = 0;row<midpoint;row++){
topPixel = pix.getPixel(col,row);bottomPixel =
pix.getPixel(col,height-1-row);bottomPixel.setColor(topPixel.getColor());
}//end inner loop}//end outer loop
return pix;}//end mirrorHoriz
//----------------------------------------------------//}//end class Prob04Runner |
-end-
Notification Switch
Would you like to follow the 'Object-oriented programming (oop) with java' conversation and receive update notifications?