/*BufferedImage01.java 12/12/99 Copyright 1999, R.G.Baldwin Illustrates: 1. Creating a BufferedImage object from code as an alternative to importing from an image file. 2. Drawing geometric shapes on the BufferedImage object. 3. Drawing the BufferedImage object on a Frame object. Draws a 4-inch by 4-inch Frame on the screen. Translates the origin to the center of the Frame. Creates a BufferedImage object 3.0 inches on each side. Gets a Graphics2D context on the BufferedImage Draws a green filled rectangle on the context that is the same size as the BufferedImage object. Draws a red filled circle on the context that just fits inside the dimensions of the BufferedImage object. The circle covers the green rectangle. Draws the BufferedImage object on the Frame, centered on the origin. Whether the dimensions in inches come out right or not depends on whether the method getScreenResolution() returns the correct resolution for your screen. Tested using JDK 1.2.2, WinNT Workstation 4.0 *****************************************/ import java.awt.geom.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; class BufferedImage01{ publicstaticvoid main(String[] args){ GUI guiObj = new GUI(); }//end main }//end controlling class BufferedImage01 class GUI extends Frame{ int res;//store screen resolution here staticfinalint ds = 72;//default scale, 72 units/inch staticfinalint hSize = 4;//horizonal size = 4 inches staticfinalint vSize = 4;//vertical size = 4 inches GUI(){//constructor //Get screen resolution res = Toolkit.getDefaultToolkit(). getScreenResolution(); //Set Frame size this.setSize(hSize*res,vSize*res); this.setVisible(true); this.setTitle("Copyright 1999, R.G.Baldwin"); //Window listener to terminate program. this.addWindowListener(new WindowAdapter(){ publicvoid windowClosing(WindowEvent e){ System.exit(0);}}); }//end constructor //-----------------------------------------------------// //Override the paint() method publicvoid paint(Graphics g){ //Downcast the Graphics object to a // Graphics2D object Graphics2D g2 = (Graphics2D)g; //Scale device space to produce inches on // the screen based on actual screen resolution. g2.scale((double)res/72,(double)res/72); //Translate origin to center of Frame g2.translate((hSize/2)*ds,(vSize/2)*ds); //Draw x-axis g2.draw(new Line2D.Double( -1.5*ds,0.0,1.5*ds,0.0)); //Draw y-axis g2.draw(new Line2D.Double( 0.0,-1.5*ds,0.0,1.5*ds)); double size = 3.0;//size of BufferedImage object //Get a BufferedImage object BufferedImage bufImg = (BufferedImage)this.createImage( (int)(size*ds), (int)(size*ds)); //Get a Graphics2D context on the // BufferedImage object Graphics2D g2dImage = bufImg.createGraphics(); //Draw a rectangle on the BufferedImage and // fill it with the color green. Rectangle2D.Double theRectangle = new Rectangle2D.Double( 0.0,0.0,size*ds,size*ds); g2dImage.setPaint(new Color(0,255,0));//green g2dImage.fill(theRectangle); g2dImage.draw(theRectangle); //Draw a circle on the BufferedImage and fill // it with the color red. Ellipse2D.Double theCircle = new Ellipse2D.Double( 0.0,0.0,size*ds,size*ds); g2dImage.setPaint(new Color(255,0,0));//red g2dImage.fill(theCircle); g2dImage.draw(theCircle); //Now draw the BufferedImage on the Frame g2.drawImage(bufImg,null,(int)(-(size/2)*ds), (int)(-(size/2)*ds)); }//end overridden paint() }//end class GUI //==============================// Figure 13 |