/* * Copyright 2006-2007 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Sun Microsystems nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package j2dbench.tests.iio; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import j2dbench.Group; import j2dbench.Option; import j2dbench.Result; import j2dbench.Test; import j2dbench.TestEnvironment; public abstract class IIOTests extends Test { protected static final String CONTENT_BLANK = "blank"; protected static final String CONTENT_RANDOM = "random"; protected static final String CONTENT_VECTOR = "vector"; protected static final String CONTENT_PHOTO = "photo"; static boolean hasImageIO; static { try { hasImageIO = (javax.imageio.ImageIO.class != null); } catch (NoClassDefFoundError e) { } } protected static Group iioRoot; protected static Group iioOptRoot; protected static Option sizeList; protected static Option contentList; protected static Option listenerTog; public static void init() { if (!hasImageIO) { // REMIND: We currently rely on Image I/O to generate the image // files that are used in the InputImageTests, so // unfortunately we need to punt on pre-1.4 JDKs... return; } iioRoot = new Group("imageio", "Image I/O Benchmarks"); iioRoot.setTabbed(); iioOptRoot = new Group(iioRoot, "opts", "General Options"); int[] sizes = new int[] {1, 20, 250, 1000, 4000}; String[] sizeStrs = new String[] { "1x1", "20x20", "250x250", "1000x1000", "4000x4000" }; String[] sizeDescs = new String[] { "Tiny Images (1x1)", "Small Images (20x20)", "Medium Images (250x250)", "Large Images (1000x1000)", "Huge Images (4000x4000)", }; sizeList = new Option.IntList(iioOptRoot, "size", "Image Size", sizes, sizeStrs, sizeDescs, 0x4); ((Option.ObjectList) sizeList).setNumRows(5); String[] contentStrs = new String[] { CONTENT_BLANK, CONTENT_RANDOM, CONTENT_VECTOR, CONTENT_PHOTO, }; String[] contentDescs = new String[] { "Blank (opaque black)", "Random", "Vector Art", "Photograph", }; contentList = new Option.ObjectList(iioOptRoot, "content", "Image Content", contentStrs, contentStrs, contentStrs, contentDescs, 0x8); InputTests.init(); if (hasImageIO) { OutputTests.init(); } } protected IIOTests(Group parent, String nodeName, String description) { super(parent, nodeName, description); addDependencies(iioOptRoot, true); } protected static BufferedImage createBufferedImage(int width, int height, String type, boolean hasAlpha) { BufferedImage image; image = new BufferedImage(width, height, hasAlpha ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB); if (type.equals(CONTENT_RANDOM)) { for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int rgb = (int)(Math.random() * 0xffffff); if (hasAlpha) { rgb |= 0x7f000000; } image.setRGB(x, y, rgb); } } } else if (type.equals(CONTENT_VECTOR)) { Graphics2D g = image.createGraphics(); if (hasAlpha) { // fill background with a translucent color g.setComposite(AlphaComposite.getInstance( AlphaComposite.SRC, 0.5f)); } g.setColor(Color.blue); g.fillRect(0, 0, width, height); g.setComposite(AlphaComposite.Src); g.setColor(Color.yellow); g.fillOval(2, 2, width-4, height-4); g.setColor(Color.red); g.fillOval(4, 4, width-8, height-8); g.setColor(Color.green); g.fillRect(8, 8, width-16, height-16); g.setColor(Color.white); g.drawLine(0, 0, width, height); g.drawLine(0, height, width, 0); g.dispose(); } else if (type.equals(CONTENT_PHOTO)) { Image photo = null; try { photo = Toolkit.getDefaultToolkit().createImage( IIOTests.class.getResource("images/photo.jpg")); } catch (Exception e) { System.err.println("error loading photo"); e.printStackTrace(); } Graphics2D g = image.createGraphics(); if (hasAlpha) { g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 0.5f)); } g.drawImage(photo, 0, 0, width, height, null); g.dispose(); } else { // CONTENT_BLANK // leave the image empty } return image; } }