Page 4 of 5
Here is how I manipulated the image.
001 /**
002 * Creates an Image, then does multiple manipulations on
003 * it to demonstrate Java 2D image manipulation features.
004 **/
005 public void paint(Graphics g) {
006 Graphics2D g2d = (Graphics2D) g;
007
008 //Again, let's set the antialiasing rendering hint on.
009 g2d.setRenderingHints(Graphics2D.ANTIALIASING,
010 Graphics2D.ANTIALIAS_ON);
011
012 //Load the Image using the loadImage() helper method. For this
013 //example, I copied my JavaWorld column photo from:
014 // http://www.javaworld.com/javaworld/icons/a-day.jpg
015 //for the image bits. I assume that this image is on your local
016 //machine, in the directory from which you are running Example07.
017 //If you would like to use a different image or directory, load the
018 //image from another machine, or use a different access protocol,
019 //change the following variables accordingly.
020 String imageProtocol = "file";
021 String imageMachine = "localhost";
022 String imageFilepath = "day.jpg";
023 Image myImage = loadImage(imageProtocol,imageMachine,imageFilepath);
024
025 //Let's display a copy of our image at x=25, y=75.
026 AffineTransform at = new AffineTransform();
027 at.translate(25.0f,75.0f);
028 g2d.transform(at);
029
030 //Note that we pass in an identity matrix as the default Image
031 //Space transform (the second parameter to drawImage). The last
032 //parameter refers to the observer for this drawing operation,
033 //in this case our instantiated Example07 object.
034 g2d.drawImage(myImage,new AffineTransform(),this);
035
036 //Now, let's scale the image and display it to the right
037 //of the original for comparison. We first use setToTranslation
038 //so that we can reset the transform before adding our new
039 //translation matrix, then we apply the scaling directly to the
040 //Image Space, rather than scaling the entire User Space.
041 at.setToTranslation(100.0f,0.0f);
042 g2d.transform(at);
043 AffineTransform atImageSpace = new AffineTransform();
044 atImageSpace.scale(1.2f,1.2f);
045 g2d.drawImage(myImage,atImageSpace,this);
046
047 //Now let's shear the image and re-display it so you can compare
048 //the sheared version with the previous two. We re-use our
049 //previous User Space transform, while we re-set the Image Space
050 //transform to shear instead of scale myImage.
051 g2d.transform(at);
052 atImageSpace.setToShear(0.2f,0.1f);
053 g2d.drawImage(myImage,atImageSpace,this);
054 }
And here is the output of these manipulations.

Three images of Bill in various states of transformation.
Notice how I am careful to clear each AffineTransform by calling the setToxxx() methods. For instance, in line 027 I use translate() to set up the first translation, but in line 041 I use setToTranslation() so that the AffineTransform is reset to the identity matrix before the new translation matrix is concatenated.
The loadImage() method uses the standard Java 1.0/1.1 mechanisms to create a URL and use it in turn to create an Image object. Please review
the source listing if you need more information on this method.
TextLayout for internationalization support in the 1.2 Java platform. Accompanied by excellent illustrations that help to simplify the
more convoluted concepts in the text. http://www.ibm.com/java/education/international-text/
Font.properties file. http://www.alumni.caltech.edu/~dank/javafont.htm
Try thisBy Anonymous on March 5, 2009, 11:37 amimport java.awt.RenderingHints; // Anti Aliasing RenderingHints rh = g.getRenderingHints(); rh.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); ...
Reply | Read entire comment
Compilation errorsBy Anonymous on March 3, 2009, 7:05 amImport, import java.awt.RenderingHints; and change: g2d.setRenderingHints(Graphics2D.ANTIALIASING,Graphics2D.ANTIALIAS_ON); to: g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
Reply | Read entire comment
Compilation errorsBy Anonymous on November 16, 2008, 9:40 amExample05.java:67: cannot find symbol symbol : variable ANTIALIASING location: class java.awt.Graphics2D g2d.setRenderingHints(Graphics2D.ANTIALIASING, ...
Reply | Read entire comment
View all comments