--- a/jdk/src/share/native/sun/awt/image/awt_parseImage.c Thu Jan 31 17:04:47 2013 -0800
+++ b/jdk/src/share/native/sun/awt/image/awt_parseImage.c Fri Feb 01 20:06:27 2013 +0400
@@ -489,6 +489,71 @@
}
}
+static void
+awt_getBIColorOrder(int type, int *colorOrder) {
+ switch(type) {
+ case java_awt_image_BufferedImage_TYPE_INT_ARGB:
+ case java_awt_image_BufferedImage_TYPE_INT_ARGB_PRE:
+#ifdef _LITTLE_ENDIAN
+ colorOrder[0] = 2;
+ colorOrder[1] = 1;
+ colorOrder[2] = 0;
+ colorOrder[3] = 3;
+#else
+ colorOrder[0] = 1;
+ colorOrder[1] = 2;
+ colorOrder[2] = 3;
+ colorOrder[3] = 0;
+#endif
+ break;
+ case java_awt_image_BufferedImage_TYPE_INT_BGR:
+#ifdef _LITTLE_ENDIAN
+ colorOrder[0] = 0;
+ colorOrder[1] = 1;
+ colorOrder[2] = 2;
+#else
+ colorOrder[0] = 3;
+ colorOrder[1] = 2;
+ colorOrder[2] = 1;
+#endif
+ break;
+ case java_awt_image_BufferedImage_TYPE_INT_RGB:
+#ifdef _LITTLE_ENDIAN
+ colorOrder[0] = 2;
+ colorOrder[1] = 1;
+ colorOrder[2] = 0;
+#else
+ colorOrder[0] = 1;
+ colorOrder[1] = 2;
+ colorOrder[2] = 3;
+#endif
+ break;
+ case java_awt_image_BufferedImage_TYPE_4BYTE_ABGR:
+ case java_awt_image_BufferedImage_TYPE_4BYTE_ABGR_PRE:
+ colorOrder[0] = 3;
+ colorOrder[1] = 2;
+ colorOrder[2] = 1;
+ colorOrder[3] = 0;
+ break;
+ case java_awt_image_BufferedImage_TYPE_3BYTE_BGR:
+ colorOrder[0] = 2;
+ colorOrder[1] = 1;
+ colorOrder[2] = 0;
+ break;
+ case java_awt_image_BufferedImage_TYPE_USHORT_565_RGB:
+ case java_awt_image_BufferedImage_TYPE_USHORT_555_RGB:
+ colorOrder[0] = 0;
+ colorOrder[1] = 1;
+ colorOrder[2] = 2;
+ break;
+ case java_awt_image_BufferedImage_TYPE_BYTE_GRAY:
+ case java_awt_image_BufferedImage_TYPE_USHORT_GRAY:
+ case java_awt_image_BufferedImage_TYPE_BYTE_BINARY:
+ case java_awt_image_BufferedImage_TYPE_BYTE_INDEXED:
+ colorOrder[0] = 0;
+ break;
+ }
+}
static int
setHints(JNIEnv *env, BufImageS_t *imageP) {
--- a/jdk/src/solaris/native/sun/awt/awt_Mlib.c Thu Jan 31 17:04:47 2013 -0800
+++ b/jdk/src/solaris/native/sun/awt/awt_Mlib.c Fri Feb 01 20:06:27 2013 +0400
@@ -145,52 +145,6 @@
return stop_timer;
}
-void awt_getBIColorOrder(int type, int *colorOrder) {
- switch(type) {
- case java_awt_image_BufferedImage_TYPE_INT_ARGB:
- case java_awt_image_BufferedImage_TYPE_INT_ARGB_PRE:
- colorOrder[0] = 1;
- colorOrder[1] = 2;
- colorOrder[2] = 3;
- colorOrder[3] = 0;
- break;
- case java_awt_image_BufferedImage_TYPE_INT_BGR:
- colorOrder[0] = 2;
- colorOrder[1] = 1;
- colorOrder[2] = 0;
- break;
- case java_awt_image_BufferedImage_TYPE_4BYTE_ABGR:
- case java_awt_image_BufferedImage_TYPE_4BYTE_ABGR_PRE:
- colorOrder[0] = 3;
- colorOrder[1] = 2;
- colorOrder[2] = 1;
- colorOrder[3] = 0;
- break;
- case java_awt_image_BufferedImage_TYPE_3BYTE_BGR:
- colorOrder[0] = 2;
- colorOrder[1] = 1;
- colorOrder[2] = 0;
- break;
- case java_awt_image_BufferedImage_TYPE_INT_RGB:
- colorOrder[0] = 1;
- colorOrder[1] = 2;
- colorOrder[2] = 3;
- break;
- case java_awt_image_BufferedImage_TYPE_USHORT_565_RGB:
- case java_awt_image_BufferedImage_TYPE_USHORT_555_RGB:
- colorOrder[0] = 0;
- colorOrder[1] = 1;
- colorOrder[2] = 2;
- break;
- case java_awt_image_BufferedImage_TYPE_BYTE_GRAY:
- case java_awt_image_BufferedImage_TYPE_USHORT_GRAY:
- case java_awt_image_BufferedImage_TYPE_BYTE_BINARY:
- case java_awt_image_BufferedImage_TYPE_BYTE_INDEXED:
- colorOrder[0] = 0;
- break;
- }
-}
-
/***************************************************************************
* Static Functions *
***************************************************************************/
--- a/jdk/src/solaris/native/sun/awt/awt_Mlib.h Thu Jan 31 17:04:47 2013 -0800
+++ b/jdk/src/solaris/native/sun/awt/awt_Mlib.h Fri Feb 01 20:06:27 2013 +0400
@@ -33,6 +33,5 @@
mlib_status awt_getImagingLib(JNIEnv *, mlibFnS_t *, mlibSysFnS_t *);
mlib_start_timer awt_setMlibStartTimer();
mlib_stop_timer awt_setMlibStopTimer();
-void awt_getBIColorOrder(int type, int *colorOrder);
#endif /* _AWT_MLIB_H */
--- a/jdk/src/windows/native/sun/windows/awt_Mlib.cpp Thu Jan 31 17:04:47 2013 -0800
+++ b/jdk/src/windows/native/sun/windows/awt_Mlib.cpp Fri Feb 01 20:06:27 2013 +0400
@@ -105,50 +105,4 @@
mlib_stop_timer awt_setMlibStopTimer() {
return NULL;
}
-
- void awt_getBIColorOrder(int type, int *colorOrder) {
- switch(type) {
- case java_awt_image_BufferedImage_TYPE_INT_ARGB:
- case java_awt_image_BufferedImage_TYPE_INT_ARGB_PRE:
- colorOrder[0] = 2;
- colorOrder[1] = 1;
- colorOrder[2] = 0;
- colorOrder[3] = 3;
- break;
- case java_awt_image_BufferedImage_TYPE_INT_BGR:
- colorOrder[0] = 0;
- colorOrder[1] = 1;
- colorOrder[2] = 2;
- break;
- case java_awt_image_BufferedImage_TYPE_INT_RGB:
- colorOrder[0] = 2;
- colorOrder[1] = 1;
- colorOrder[2] = 0;
- break;
- case java_awt_image_BufferedImage_TYPE_4BYTE_ABGR:
- case java_awt_image_BufferedImage_TYPE_4BYTE_ABGR_PRE:
- colorOrder[0] = 3;
- colorOrder[1] = 2;
- colorOrder[2] = 1;
- colorOrder[3] = 0;
- break;
- case java_awt_image_BufferedImage_TYPE_3BYTE_BGR:
- colorOrder[0] = 2;
- colorOrder[1] = 1;
- colorOrder[2] = 0;
- break;
- case java_awt_image_BufferedImage_TYPE_USHORT_565_RGB:
- case java_awt_image_BufferedImage_TYPE_USHORT_555_RGB:
- colorOrder[0] = 0;
- colorOrder[1] = 1;
- colorOrder[2] = 2;
- break;
- case java_awt_image_BufferedImage_TYPE_BYTE_GRAY:
- case java_awt_image_BufferedImage_TYPE_USHORT_GRAY:
- case java_awt_image_BufferedImage_TYPE_BYTE_BINARY:
- case java_awt_image_BufferedImage_TYPE_BYTE_INDEXED:
- colorOrder[0] = 0;
- break;
- }
- }
}
--- a/jdk/src/windows/native/sun/windows/awt_Mlib.h Thu Jan 31 17:04:47 2013 -0800
+++ b/jdk/src/windows/native/sun/windows/awt_Mlib.h Fri Feb 01 20:06:27 2013 +0400
@@ -38,7 +38,6 @@
mlibSysFnS_t *sMlibSysFns);
JNIEXPORT mlib_start_timer awt_setMlibStartTimer();
JNIEXPORT mlib_stop_timer awt_setMlibStopTimer();
-JNIEXPORT void awt_getBIColorOrder(int type, int *colorOrder);
#ifdef __cplusplus
}; /* end of extern "C" */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/image/LookupOp/IntImageReverseTest.java Fri Feb 01 20:06:27 2013 +0400
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8004801
+ * @summary Test verifies that byte lookup table with single lookup
+ * affects only color components in buffered images with
+ * integer data type, and that this operation does not distort
+ * colors in the destination image.
+ * @run main IntImageReverseTest
+ */
+
+import java.awt.image.BufferedImage;
+import java.awt.image.ByteLookupTable;
+import java.awt.image.LookupOp;
+import java.awt.image.LookupTable;
+
+public class IntImageReverseTest {
+
+ public static void main(String[] args) {
+ LookupTable tbl = createReverseTable();
+ LookupOp op = new LookupOp(tbl, null);
+
+ for (ImageType t : ImageType.values()) {
+ System.out.print(t);
+
+ BufferedImage src = createSourceImage(t);
+
+ BufferedImage dst = op.filter(src, null);
+
+ int rgb = dst.getRGB(0, 0);
+
+ System.out.printf(" Result: 0x%X ", rgb);
+
+ if (rgb != argbReverse) {
+ throw new RuntimeException("Test failed.");
+ }
+ System.out.println("Passed.");
+ }
+ }
+
+ /**
+ * Reverse image color components, leave alpha unchanged.
+ */
+ private static LookupTable createReverseTable() {
+ byte[] data = new byte[256];
+
+ for (int i = 0; i < 256; i++) {
+ data[i] = (byte) (255 - i);
+ }
+
+
+ return new ByteLookupTable(0, data);
+ }
+
+ private static BufferedImage createSourceImage(ImageType type) {
+ BufferedImage img = new BufferedImage(1, 1, type.bi_type);
+
+ img.setRGB(0, 0, argbTest);
+
+ return img;
+ }
+ private static final int argbTest = 0xFFDDAA77;
+ private static final int argbReverse = 0xFF225588;
+
+ private static enum ImageType {
+
+ INT_ARGB(BufferedImage.TYPE_INT_ARGB),
+ INT_ARGB_PRE(BufferedImage.TYPE_INT_ARGB_PRE),
+ INT_RGB(BufferedImage.TYPE_INT_BGR),
+ INT_BGR(BufferedImage.TYPE_INT_BGR);
+
+ private ImageType(int bi_type) {
+ this.bi_type = bi_type;
+ }
+ public final int bi_type;
+ }
+}