1 /* 2 * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 6585922 27 * @summary Test verifies ConvolveOp creates compatible destination images 28 * of same type and this pair {src, dst} can be handled by the 29 * ConvolveOp filter. 30 * 31 * @modules java.desktop/sun.awt 32 * @run main OpCompatibleImageTest 33 */ 34 35 import java.awt.Color; 36 import java.awt.Graphics; 37 import java.awt.image.BufferedImage; 38 import java.awt.image.BufferedImageOp; 39 import java.awt.image.ColorModel; 40 import java.awt.image.ConvolveOp; 41 import java.awt.image.ImagingOpException; 42 import java.awt.image.Kernel; 43 44 public class OpCompatibleImageTest { 45 46 public static void main(String[] args) { 47 OpCompatibleImageTest t = new OpCompatibleImageTest(); 48 t.doTest(BufferedImage.TYPE_3BYTE_BGR); 49 t.doTest(BufferedImage.TYPE_4BYTE_ABGR); 50 t.doTest(BufferedImage.TYPE_BYTE_GRAY); 51 t.doTest(BufferedImage.TYPE_INT_ARGB); 52 t.doTest(BufferedImage.TYPE_INT_BGR); 53 t.doTest(BufferedImage.TYPE_INT_RGB); 54 t.doTest(BufferedImage.TYPE_BYTE_INDEXED); 55 } 56 57 private BufferedImageOp op; 58 59 public OpCompatibleImageTest() { 60 final Kernel kernel = new Kernel(3, 3, 61 new float[] { 62 1f/9f, 1f/9f, 1f/9f, 63 1f/9f, 1f/9f, 1f/9f, 64 1f/9f, 1f/9f, 1f/9f}); 65 op = new ConvolveOp(kernel); 66 } 67 68 public void doTest(int type) { 69 System.out.println("Test for type " + describeType(type)); 70 71 BufferedImage src = createTestImage(type); 72 73 BufferedImage res = null; 74 75 System.out.println("Testing null destination..."); 76 try { 77 res = op.filter(src, null); 78 } catch (ImagingOpException e) { 79 throw new RuntimeException("Test FAILED!", e); 80 } 81 82 if (res == null || 83 ((src.getType() != BufferedImage.TYPE_BYTE_INDEXED) && 84 (res.getType() != src.getType()))) 85 { 86 throw new RuntimeException("Test FAILED!"); 87 } 88 System.out.println("Test PASSED."); 89 } 90 91 private BufferedImage createCompatible(ColorModel cm, int w, int h) { 92 return new BufferedImage (cm, 93 cm.createCompatibleWritableRaster(w, h), 94 cm.isAlphaPremultiplied(), null); 95 } 96 97 private BufferedImage createTestImage(int type) { 98 BufferedImage img = new BufferedImage(100, 100, type); 99 Graphics g = img.createGraphics(); 100 g.setColor(Color.red); 101 g.fillRect(0, 0, 100, 100); 102 g.dispose(); 103 104 return img; 105 } 106 107 private static String describeType(int type) { 108 switch(type) { 109 case BufferedImage.TYPE_3BYTE_BGR: 110 return "TYPE_3BYTE_BGR"; 111 case BufferedImage.TYPE_4BYTE_ABGR: 112 return "TYPE_4BYTE_ABGR"; 113 case BufferedImage.TYPE_BYTE_GRAY: 114 return "TYPE_BYTE_GRAY"; 115 case BufferedImage.TYPE_INT_ARGB: 116 return "TYPE_INT_ARGB"; 117 case BufferedImage.TYPE_INT_BGR: 118 return "TYPE_INT_BGR"; 119 case BufferedImage.TYPE_INT_RGB: 120 return "TYPE_INT_RGB"; 121 case BufferedImage.TYPE_BYTE_INDEXED: 122 return "TYPE_BYTE_INDEXED"; 123 default: 124 throw new RuntimeException("Test FAILED: unknown type " + type); 125 } 126 } 127 }