1/*
2 * Copyright (c) 2017, 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 8130737 8172559
27 * @summary test no exception rasterop for child raster with non-zero offset
28 */
29
30import java.awt.geom.AffineTransform;
31import java.awt.image.AffineTransformOp;
32import java.awt.image.DataBuffer;
33import java.awt.image.DataBufferByte;
34import java.awt.image.DataBufferInt;
35import java.awt.image.DataBufferUShort;
36import java.awt.image.Raster;
37import java.awt.image.WritableRaster;
38
39public class TestChildRasterOp {
40
41    private static AffineTransform at = new AffineTransform();
42    private static final AffineTransformOp rop =
43        new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
44    private static int[] offsets = {0};
45
46    public static void main(String[] args) {
47        testByteRaster();
48        testShortRaster();
49        testIntRaster();
50    }
51
52    private static void testByteRaster() {
53        WritableRaster srcRaster, dstRaster;
54
55        byte[] pixels =
56            { 11, 12, 13, 14,
57              21, 22, 23, 24,
58              31, 32, 33, 34,
59              41, 42, 43, 44 };
60
61        DataBuffer db = new DataBufferByte(pixels, pixels.length);
62        srcRaster =
63            Raster.createInterleavedRaster(db, 4, 4, 4, 1, offsets, null);
64        srcRaster = srcRaster.createWritableChild(1, 1, 3, 3, 0, 0, null);
65        dstRaster = rop.filter(srcRaster, null);
66    }
67
68    private static void testShortRaster() {
69        WritableRaster srcRaster, dstRaster;
70
71        short[] pixels =
72            { 11, 12, 13, 14,
73              21, 22, 23, 24,
74              31, 32, 33, 34,
75              41, 42, 43, 44 };
76
77        DataBuffer db = new DataBufferUShort(pixels, pixels.length);
78        srcRaster =
79            Raster.createInterleavedRaster(db, 4, 4, 4, 1, offsets, null);
80        srcRaster = srcRaster.createWritableChild(1, 1, 3, 3, 0, 0, null);
81        dstRaster = rop.filter(srcRaster, null);
82    }
83
84    private static void testIntRaster() {
85        WritableRaster srcRaster, dstRaster;
86
87        int[] pixels =
88            { 11, 12, 13, 14,
89              21, 22, 23, 24,
90              31, 32, 33, 34,
91              41, 42, 43, 44 };
92
93        DataBuffer db = new DataBufferInt(pixels, pixels.length);
94        srcRaster =
95            Raster.createPackedRaster(db, 4, 4, 4,  offsets, null);
96        srcRaster = srcRaster.createWritableChild(1, 1, 3, 3, 0, 0, null);
97        dstRaster = rop.filter(srcRaster, null);
98    }
99}
100