1 /*
2 * Copyright (c) 2007, 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. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
359 }
360
361 static int safeAdd(int a, int b) throws ImageLayoutException {
362 long res = a;
363 res += b;
364 if (res < Integer.MIN_VALUE || res > Integer.MAX_VALUE) {
365 throw new ImageLayoutException("Invalid image layout");
366 }
367 return (int)res;
368 }
369
370 static int safeMult(int a, int b) throws ImageLayoutException {
371 long res = a;
372 res *= b;
373 if (res < Integer.MIN_VALUE || res > Integer.MAX_VALUE) {
374 throw new ImageLayoutException("Invalid image layout");
375 }
376 return (int)res;
377 }
378
379 public static class ImageLayoutException extends Exception {
380 public ImageLayoutException(String message) {
381 super(message);
382 }
383 }
384 public static LCMSImageLayout createImageLayout(Raster r) {
385 LCMSImageLayout l = new LCMSImageLayout();
386 if (r instanceof ByteComponentRaster) {
387 ByteComponentRaster br = (ByteComponentRaster)r;
388
389 ComponentSampleModel csm = (ComponentSampleModel)r.getSampleModel();
390
391 l.pixelType = CHANNELS_SH(br.getNumBands()) | BYTES_SH(1);
392
393 int[] bandOffsets = csm.getBandOffsets();
394 BandOrder order = BandOrder.getBandOrder(bandOffsets);
395
396 int firstBand = 0;
397 switch (order) {
398 case INVERTED:
|
1 /*
2 * Copyright (c) 2007, 2014, 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. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
359 }
360
361 static int safeAdd(int a, int b) throws ImageLayoutException {
362 long res = a;
363 res += b;
364 if (res < Integer.MIN_VALUE || res > Integer.MAX_VALUE) {
365 throw new ImageLayoutException("Invalid image layout");
366 }
367 return (int)res;
368 }
369
370 static int safeMult(int a, int b) throws ImageLayoutException {
371 long res = a;
372 res *= b;
373 if (res < Integer.MIN_VALUE || res > Integer.MAX_VALUE) {
374 throw new ImageLayoutException("Invalid image layout");
375 }
376 return (int)res;
377 }
378
379 @SuppressWarnings("serial") // JDK-implementation class
380 public static class ImageLayoutException extends Exception {
381 public ImageLayoutException(String message) {
382 super(message);
383 }
384 }
385 public static LCMSImageLayout createImageLayout(Raster r) {
386 LCMSImageLayout l = new LCMSImageLayout();
387 if (r instanceof ByteComponentRaster) {
388 ByteComponentRaster br = (ByteComponentRaster)r;
389
390 ComponentSampleModel csm = (ComponentSampleModel)r.getSampleModel();
391
392 l.pixelType = CHANNELS_SH(br.getNumBands()) | BYTES_SH(1);
393
394 int[] bandOffsets = csm.getBandOffsets();
395 BandOrder order = BandOrder.getBandOrder(bandOffsets);
396
397 int firstBand = 0;
398 switch (order) {
399 case INVERTED:
|