MlibOpsTest.java revision 6353
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/*
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock *
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * This code is free software; you can redistribute it and/or modify it
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * under the terms of the GNU General Public License version 2 only, as
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * published by the Free Software Foundation.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock *
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * This code is distributed in the hope that it will be useful, but WITHOUT
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * version 2 for more details (a copy is included in the LICENSE file that
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * accompanied this code).
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock *
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * You should have received a copy of the GNU General Public License version
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * 2 along with this work; if not, write to the Free Software Foundation,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock *
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * or visit www.oracle.com if you need additional information or have any
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * questions.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock/*
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @test
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @bug 6556332 8011992 8012112
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @summary Test verifies that on-demnad loading of medialib library does
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * not break imageing ops based on this library.
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @run main MlibOpsTest
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock * @run main/othervm/policy=mlib.security.policy MlibOpsTest
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock */
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.Color;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.Graphics2D;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.RadialGradientPaint;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.geom.AffineTransform;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.geom.Point2D;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.image.AffineTransformOp;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.image.BufferedImage;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.image.BufferedImageOp;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.image.ByteLookupTable;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.image.ConvolveOp;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.image.Kernel;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.awt.image.LookupOp;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport java.util.Arrays;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockimport sun.awt.image.ImagingLib;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrockpublic class MlibOpsTest {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock public static void main(String[] args) {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock System.out.println("AffineTransformOp:");
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock BufferedImageOp op = getAffineTransformOp();
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock doTest(op);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock System.out.println("ConvolveOp:");
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock op = getConvolveOp();
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock doTest(op);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock System.out.println("LookupOp:");
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock op = getLookupOp();
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock doTest(op);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock }
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock public static void doTest(BufferedImageOp op) {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock BufferedImage src = createSrcImage();
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock BufferedImage dst = createImage();
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock BufferedImage ret = null;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock try {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock ret = ImagingLib.filter(op, src, dst);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock } catch (Exception e) {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock throw new RuntimeException("Test FAILED.", e);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock }
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock if (ret == null) {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock throw new RuntimeException("Test FAILED: null output");
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock }
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock System.out.println("ret: " + ret);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock System.out.println("Test PASSED for " + op.getClass().getName());
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock }
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock private static BufferedImageOp getAffineTransformOp() {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock AffineTransform at = new AffineTransform();
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock return new AffineTransformOp(at,
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock AffineTransformOp.TYPE_BICUBIC);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock }
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock private static BufferedImageOp getConvolveOp() {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock int kw = 3;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock int kh = 3;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock int size = kw * kh;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock float[] kdata = new float[size];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock Arrays.fill(kdata, 1.0f / size);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock Kernel k = new Kernel(kw, kh, kdata);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock return new ConvolveOp(k);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock }
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock private static BufferedImageOp getLookupOp() {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock byte[] inv = new byte[256];
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock for (int i = 0; i < 256; i++) {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock inv[i] = (byte)(255 - i);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock }
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock ByteLookupTable table = new ByteLookupTable(0, inv);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock return new LookupOp(table, null);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock }
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock private static int w = 100;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock private static int h = 100;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock private static BufferedImage createImage() {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock return new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock }
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock private static BufferedImage createSrcImage() {
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock BufferedImage img = createImage();
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock Graphics2D g = img.createGraphics();
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock Color[] colors = { Color.red, Color.green, Color.blue };
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock float[] dist = {0.0f, 0.5f, 1.0f };
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock Point2D center = new Point2D.Float(0.5f * w, 0.5f * h);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock RadialGradientPaint p =
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock new RadialGradientPaint(center, 0.5f * w, dist, colors);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock g.setPaint(p);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock g.fillRect(0, 0, w, h);
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock g.dispose();
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock return img;
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock }
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock}
275c9da86e89f8abf71135cf63d9fc23671b2e60eschrock