1 /* 2 * Copyright (c) 2016, 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 import java.awt.Point; 25 import java.awt.image.DataBuffer; 26 import java.awt.image.DataBufferByte; 27 import java.awt.image.DataBufferDouble; 28 import java.awt.image.DataBufferFloat; 29 import java.awt.image.DataBufferInt; 30 import java.awt.image.DataBufferShort; 31 import java.awt.image.DataBufferUShort; 32 import java.awt.image.SampleModel; 33 import java.awt.image.MultiPixelPackedSampleModel; 34 import java.awt.image.PixelInterleavedSampleModel; 35 import java.awt.image.SinglePixelPackedSampleModel; 36 import java.awt.image.Raster; 37 38 /* 39 * @test 40 * @bug 6353518 41 * @summary Test possible combinations of WritableRaster creation 42 * Test fails if Raster.createWritableRaster() throws exception. 43 */ 44 public class CreateWritableRasterTest { 45 46 public static void main(String[] args) { 47 48 final int width = 20; 49 final int height = 10; 50 final int imageSize = width * height; 51 Point location = new Point(0, 0); 52 int bandOffsets[] = {0}; 53 int bitMask[] = { 0x00ff0000, 0x0000ff00, 0xff, 0x0}; 54 55 SampleModel inputSampleModels[] = { 56 new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE, 57 1, 1, 1, 1, bandOffsets), 58 new PixelInterleavedSampleModel(DataBuffer.TYPE_USHORT, 59 1, 1, 1, 1, bandOffsets), 60 new PixelInterleavedSampleModel(DataBuffer.TYPE_INT, 61 1, 1, 1, 1, bandOffsets), 62 new SinglePixelPackedSampleModel(DataBuffer.TYPE_BYTE, 63 width, height, bitMask), 64 new SinglePixelPackedSampleModel(DataBuffer.TYPE_USHORT, 65 width, height, bitMask), 66 new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, 67 width, height, bitMask), 68 new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, 69 width, height, 4) 70 }; 71 72 // --------------------------------------------------------------------- 73 // Test ability to create WritableRaster with DataBuffer classes 74 // --------------------------------------------------------------------- 75 DataBuffer inputDataBuffer[] = { 76 new DataBufferByte(imageSize), 77 new DataBufferDouble(imageSize), 78 new DataBufferFloat(imageSize), 79 new DataBufferShort(imageSize), 80 new DataBufferUShort(imageSize), 81 new DataBufferInt(imageSize, 1) 82 }; 83 84 for (SampleModel sm : inputSampleModels) { 85 for (DataBuffer db : inputDataBuffer) { 86 Raster.createWritableRaster(sm, db, location); 87 } 88 } 89 90 // --------------------------------------------------------------------- 91 // Test ability to create WritableRaster with custom DataBuffer classes 92 // --------------------------------------------------------------------- 93 DataBuffer myDataBuffer[] = { 94 new MyDataBufferByte(imageSize), 95 new MyDataBufferDouble(imageSize), 96 new MyDataBufferFloat(imageSize), 97 new MyDataBufferShort(imageSize), 98 new MyDataBufferUShort(imageSize), 99 new MyDataBufferInt(imageSize) 100 }; 101 102 for (SampleModel sm : inputSampleModels) { 103 for (DataBuffer db : myDataBuffer) { 104 Raster.createWritableRaster(sm, db, location); 105 } 106 } 107 } 108 } 109 110 111 // --------------------------------------------------------------------- 112 // Custom DataBuffer classes for testing purpose 113 // --------------------------------------------------------------------- 114 final class MyDataBufferByte extends DataBuffer { 115 116 byte data[]; 117 byte bankdata[][]; 118 119 public MyDataBufferByte(int size) { 120 super(TYPE_BYTE, size); 121 data = new byte[size]; 122 bankdata = new byte[1][]; 123 bankdata[0] = data; 124 } 125 126 @Override 127 public int getElem(int bank, int i) { 128 return bankdata[bank][i + offsets[bank]]; 129 } 130 131 @Override 132 public void setElem(int bank, int i, int val) { 133 bankdata[bank][i + offsets[bank]] = (byte) val; 134 } 135 } 136 137 final class MyDataBufferDouble extends DataBuffer { 138 139 double data[]; 140 double bankdata[][]; 141 142 public MyDataBufferDouble(int size) { 143 super(TYPE_DOUBLE, size); 144 data = new double[size]; 145 bankdata = new double[1][]; 146 bankdata[0] = data; 147 } 148 149 @Override 150 public int getElem(int bank, int i) { 151 return (int) bankdata[bank][i + offsets[bank]]; 152 } 153 154 @Override 155 public void setElem(int bank, int i, int val) { 156 bankdata[bank][i + offsets[bank]] = (double) val; 157 } 158 } 159 160 final class MyDataBufferFloat extends DataBuffer { 161 162 float data[]; 163 float bankdata[][]; 164 165 public MyDataBufferFloat(int size) { 166 super(TYPE_FLOAT, size); 167 data = new float[size]; 168 bankdata = new float[1][]; 169 bankdata[0] = data; 170 } 171 172 @Override 173 public int getElem(int bank, int i) { 174 return (int) bankdata[bank][i + offsets[bank]]; 175 } 176 177 @Override 178 public void setElem(int bank, int i, int val) { 179 bankdata[bank][i + offsets[bank]] = (float) val; 180 } 181 } 182 183 final class MyDataBufferShort extends DataBuffer { 184 185 short data[]; 186 short bankdata[][]; 187 188 public MyDataBufferShort(int size) { 189 super(TYPE_SHORT, size); 190 data = new short[size]; 191 bankdata = new short[1][]; 192 bankdata[0] = data; 193 } 194 195 @Override 196 public int getElem(int bank, int i) { 197 return bankdata[bank][i + offsets[bank]]; 198 } 199 200 @Override 201 public void setElem(int bank, int i, int val) { 202 bankdata[bank][i + offsets[bank]] = (short) val; 203 } 204 } 205 206 final class MyDataBufferUShort extends DataBuffer { 207 208 short data[]; 209 short bankdata[][]; 210 211 public MyDataBufferUShort(int size) { 212 super(TYPE_USHORT, size); 213 data = new short[size]; 214 bankdata = new short[1][]; 215 bankdata[0] = data; 216 } 217 218 @Override 219 public int getElem(int bank, int i) { 220 return bankdata[bank][i + offsets[bank]]; 221 } 222 223 @Override 224 public void setElem(int bank, int i, int val) { 225 bankdata[bank][i + offsets[bank]] = (short) val; 226 } 227 } 228 229 final class MyDataBufferInt extends DataBuffer { 230 231 int data[]; 232 int bankdata[][]; 233 234 public MyDataBufferInt(int size) { 235 super(TYPE_INT, size); 236 data = new int[size]; 237 bankdata = new int[1][]; 238 bankdata[0] = data; 239 } 240 241 @Override 242 public int getElem(int bank, int i) { 243 return bankdata[bank][i + offsets[bank]]; 244 } 245 246 @Override 247 public void setElem(int bank, int i, int val) { 248 bankdata[bank][i + offsets[bank]] = (int) val; 249 } 250 } 251