Mega Code Archive

 
Categories / Java / Game
 

Image Speed Test 2

/* DEVELOPING GAME IN JAVA  Caracteristiques Editeur : NEW RIDERS  Auteur : BRACKEEN  Parution : 09 2003  Pages : 972  Isbn : 1-59273-005-1  Reliure : Paperback  Disponibilite : Disponible a la librairie  */ import java.awt.*; import java.awt.geom.AffineTransform; import javax.swing.ImageIcon; import javax.swing.JFrame; public class ImageSpeedTest2 extends JFrame {     public static void main(String args[]) {         DisplayMode displayMode;         if (args.length == 3) {             displayMode = new DisplayMode(                 Integer.parseInt(args[0]),                 Integer.parseInt(args[1]),                 Integer.parseInt(args[2]),                 DisplayMode.REFRESH_RATE_UNKNOWN);         }         else {             displayMode = new DisplayMode(800, 600, 16,                 DisplayMode.REFRESH_RATE_UNKNOWN);         }         ImageSpeedTest2 test = new ImageSpeedTest2();         test.run(displayMode);     }     private static final int FONT_SIZE = 24;     private static final long TIME_PER_IMAGE = 1500;     private SimpleScreenManager screen;     private Image bgImage;     private Image opaqueImage;     private Image transparentImage;     private Image translucentImage;     private Image antiAliasedImage;     private boolean imagesLoaded;     public void run(DisplayMode displayMode) {         setBackground(Color.blue);         setForeground(Color.white);         setFont(new Font("Dialog", Font.PLAIN, FONT_SIZE));         imagesLoaded = false;         screen = new SimpleScreenManager();         try {             screen.setFullScreen(displayMode, this);             synchronized (this) {                 loadImages();                 // wait for test to complete                 try {                     wait();                 }                 catch (InterruptedException ex) { }             }         }         finally {             screen.restoreScreen();         }     }     public void loadImages() {         bgImage = loadImage("images/background.jpg");         opaqueImage = loadImage("images/opaque.png");         transparentImage = loadImage("images/transparent.png");         translucentImage = loadImage("images/translucent.png");         antiAliasedImage = loadImage("images/antialiased.png");         imagesLoaded = true;         // signal to AWT to repaint this window         repaint();     }     private final Image loadImage(String fileName) {         return new ImageIcon(fileName).getImage();     }     public void paint(Graphics g) {         // set text anti-aliasing         if (g instanceof Graphics2D) {             Graphics2D g2 = (Graphics2D)g;             g2.setRenderingHint(                 RenderingHints.KEY_TEXT_ANTIALIASING,                 RenderingHints.VALUE_TEXT_ANTIALIAS_ON);         }         // draw images         if (imagesLoaded) {             drawImage(g, opaqueImage, "Opaque", false);             drawImage(g, transparentImage, "Transparent", false);             drawImage(g, translucentImage, "Translucent", false);             drawImage(g, antiAliasedImage,               "Translucent (Anti-Aliased)", false);             drawImage(g, opaqueImage, "Opaque (Flipped)", true);             drawImage(g, transparentImage,                 "Transparent (Flipped)", true);             drawImage(g, translucentImage,                 "Translucent (Flipped)", true);             drawImage(g, antiAliasedImage,               "Translucent (Anti-Aliased, Flipped)", true);             // notify that the test is complete             synchronized (this) {                 notify();             }         }         else {             g.drawString("Loading Images...", 5, FONT_SIZE);         }     }     public void drawImage(Graphics g1, Image image, String name,         boolean flip)     {         Graphics2D g = (Graphics2D)g1;         AffineTransform transform = new AffineTransform();         int width = screen.getFullScreenWindow().getWidth() -             image.getWidth(null);         int height = screen.getFullScreenWindow().getHeight() -             image.getHeight(null);         int numImages = 0;         g.drawImage(bgImage, 0, 0, null);         long startTime = System.currentTimeMillis();         while (System.currentTimeMillis() - startTime             < TIME_PER_IMAGE)         {             int x = Math.round((float)Math.random() * width);             int y = Math.round((float)Math.random() * height);             transform.setToTranslation(x, y);             // if the sprite is moving left, flip the image             if (flip) {                 transform.scale(-1, 1);                 transform.translate(-image.getWidth(null), 0);             }             // draw it             g.drawImage(image, transform, null);             numImages++;         }         long time = System.currentTimeMillis() - startTime;         float speed = numImages * 1000f / time;         System.out.println(name + ": " + speed + " images/sec");     } } /**  * The SimpleScreenManager class manages initializing and displaying full screen  * graphics modes.  */ class SimpleScreenManager {   private GraphicsDevice device;   /**    * Creates a new SimpleScreenManager object.    */   public SimpleScreenManager() {     GraphicsEnvironment environment = GraphicsEnvironment         .getLocalGraphicsEnvironment();     device = environment.getDefaultScreenDevice();   }   /**    * Enters full screen mode and changes the display mode.    */   public void setFullScreen(DisplayMode displayMode, JFrame window) {     window.setUndecorated(true);     window.setResizable(false);     device.setFullScreenWindow(window);     if (displayMode != null && device.isDisplayChangeSupported()) {       try {         device.setDisplayMode(displayMode);       } catch (IllegalArgumentException ex) {         // ignore - illegal mode for this device       }     }   }   /**    * Returns the window currently used in full screen mode.    */   public Window getFullScreenWindow() {     return device.getFullScreenWindow();   }   /**    * Restores the screen's display mode.    */   public void restoreScreen() {     Window window = device.getFullScreenWindow();     if (window != null) {       window.dispose();     }     device.setFullScreenWindow(null);   } }