Package

Source Code of LUTCompareTest

/*
* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/

/*
* @test
* @bug     6570475
* @summary Test verifies that palette comparison procedure of
*          ImageRepresentation class does not produce extra transparent
*          pixels.
*
* @run     main LUTCompareTest
*/


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.ImageObserver;
import java.awt.image.IndexColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class LUTCompareTest implements ImageObserver {

    public static void main(String[] args) throws IOException {
        Image img = createTestImage();

        Toolkit tk = Toolkit.getDefaultToolkit();

        LUTCompareTest o = new LUTCompareTest(img);

        tk.prepareImage(img, -1, -1, o);

        while(!o.isImageReady()) {
            synchronized(lock) {
                try {
                    lock.wait(200);
                } catch (InterruptedException e) {
                }
            }
        }

        checkResults(img);
    }

    private static Object lock = new Object();

    Image image;

    boolean isReady = false;

    public LUTCompareTest(Image img) {
        this.image = img;
    }

    public boolean imageUpdate(Image image, int info,
                               int x, int y, int w, int h) {
        if (image == this.image) {
            System.out.println("Image status: " + dump(info));
            synchronized(this) {
                isReady = (info & ImageObserver.ALLBITS) != 0;
                    if (isReady) {
                        synchronized(lock) {
                            lock.notifyAll();
                        }
                    }
            }
            return !isReady;
        } else {
            return true;
        }
    }

    public synchronized boolean isImageReady() {
        return isReady;
    }

    private static void checkResults(Image image) {
        BufferedImage buf = new BufferedImage(w, h,
                                              BufferedImage.TYPE_INT_RGB);
        Graphics2D g = buf.createGraphics();
        g.setColor(Color.pink);
        g.fillRect(0, 0, w, h);

        g.drawImage(image, 0, 0, null);

        g.dispose();

        int rgb = buf.getRGB(w/2, h/2);

        System.out.printf("Result color: %x\n", rgb);

        /* Buffered image should be the same as the last frame
         * of animated sequence (which is filled with blue).
         * Any other color indicates the problem.
         */
        if (rgb != 0xff0000ff) {
            throw new RuntimeException("Test FAILED!");
        }

        System.out.println("Test PASSED.");
    }

    private static int w = 100;
    private static int h = 100;

    /* Create test image with two frames:
     *  1) with {red, red} palette
     *  2) with {blue, red } palette
     */
    private static Image createTestImage() throws IOException  {
        BufferedImage frame1 = createFrame(new int[] { 0xffff0000, 0xffff0000 });
        BufferedImage frame2 = createFrame(new int[] { 0xff0000ff, 0xffff0000 });

        ImageWriter writer = ImageIO.getImageWritersByFormatName("GIF").next();
        ImageOutputStream ios = ImageIO.createImageOutputStream(new File("lut_test.gif"));
        ImageWriteParam param = writer.getDefaultWriteParam();
        writer.setOutput(ios);
        writer.prepareWriteSequence(null);
        writer.writeToSequence(new IIOImage(frame1, null, null), param);
        writer.writeToSequence(new IIOImage(frame2, null, null), param);
        writer.endWriteSequence();
        writer.reset();
        writer.dispose();

        ios.flush();
        ios.close();

        return Toolkit.getDefaultToolkit().createImage("lut_test.gif");
    }

    private static BufferedImage createFrame(int[] palette) {
        IndexColorModel icm = new IndexColorModel(getNumBits(palette.length),
            palette.length, palette, 0, false, -1, DataBuffer.TYPE_BYTE);
        WritableRaster wr = icm.createCompatibleWritableRaster(w, h);
        int[] samples = new int[w * h];
        Arrays.fill(samples, 0);
        wr.setSamples(0, 0, w, h, 0, samples);

        BufferedImage img = new BufferedImage(icm, wr, false, null);
        return img;
    }

    private static int getNumBits(int size) {
        if (size < 0) {
            throw new RuntimeException("Invalid palette size: " + size);
        } else if (size < 3) {
            return 1;
        } else if (size < 5) {
            return 2;
        } else {
            throw new RuntimeException("Palette size is not supported: " + size);
        }
    }

     private static String[] name = new String[] {
        "WIDTH", "HEIGHT", "PROPERTIES", "SOMEBITS",
        "FRAMEBITS", "ALLBITS", "ERROR", "ABORT"
    };

    private static String dump(int info) {
        String res = "";
        int count = 0;
        while (info != 0) {
            //System.out.println("info = " + info);
            if ((info & 0x1) == 1) {
                res += name[count];
                if ((info >> 1) != 0) {
                    res += " ";
                }

            }
            count ++;
            info = (info >> 1);
        }
        return res;
    }
}
TOP

Related Classes of LUTCompareTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.