From f11f6a98c871af11b8ba3d5bc44584d157c45717 Mon Sep 17 00:00:00 2001 From: bae Date: Fri, 1 Feb 2013 20:06:27 +0400 Subject: [PATCH] 8004801: The image of BufferedImage.TYPE_INT_ARGB is blank. Reviewed-by: prr --- .../native/sun/awt/image/awt_parseImage.c | 65 ++++++++++++ src/solaris/native/sun/awt/awt_Mlib.c | 46 --------- src/solaris/native/sun/awt/awt_Mlib.h | 1 - src/windows/native/sun/windows/awt_Mlib.cpp | 46 --------- src/windows/native/sun/windows/awt_Mlib.h | 1 - .../image/LookupOp/IntImageReverseTest.java | 99 +++++++++++++++++++ 6 files changed, 164 insertions(+), 94 deletions(-) create mode 100644 test/java/awt/image/LookupOp/IntImageReverseTest.java diff --git a/src/share/native/sun/awt/image/awt_parseImage.c b/src/share/native/sun/awt/image/awt_parseImage.c index 264a02f16..d6f6d60d3 100644 --- a/src/share/native/sun/awt/image/awt_parseImage.c +++ b/src/share/native/sun/awt/image/awt_parseImage.c @@ -489,6 +489,71 @@ void awt_freeParsedImage(BufImageS_t *imageP, int freeImageP) { } } +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) { diff --git a/src/solaris/native/sun/awt/awt_Mlib.c b/src/solaris/native/sun/awt/awt_Mlib.c index fb00d4d9f..0b7c291c8 100644 --- a/src/solaris/native/sun/awt/awt_Mlib.c +++ b/src/solaris/native/sun/awt/awt_Mlib.c @@ -145,52 +145,6 @@ mlib_stop_timer awt_setMlibStopTimer() { 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 * ***************************************************************************/ diff --git a/src/solaris/native/sun/awt/awt_Mlib.h b/src/solaris/native/sun/awt/awt_Mlib.h index 03d658689..cbaf38d1d 100644 --- a/src/solaris/native/sun/awt/awt_Mlib.h +++ b/src/solaris/native/sun/awt/awt_Mlib.h @@ -33,6 +33,5 @@ typedef void (*mlib_stop_timer)(int, int); 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 */ diff --git a/src/windows/native/sun/windows/awt_Mlib.cpp b/src/windows/native/sun/windows/awt_Mlib.cpp index 022ebd041..308b2823e 100644 --- a/src/windows/native/sun/windows/awt_Mlib.cpp +++ b/src/windows/native/sun/windows/awt_Mlib.cpp @@ -105,50 +105,4 @@ extern "C" 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; - } - } } diff --git a/src/windows/native/sun/windows/awt_Mlib.h b/src/windows/native/sun/windows/awt_Mlib.h index f9b63d900..9ebee32a9 100644 --- a/src/windows/native/sun/windows/awt_Mlib.h +++ b/src/windows/native/sun/windows/awt_Mlib.h @@ -38,7 +38,6 @@ JNIEXPORT mlib_status awt_getImagingLib(JNIEnv *env, mlibFnS_t *sMlibFns, 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" */ diff --git a/test/java/awt/image/LookupOp/IntImageReverseTest.java b/test/java/awt/image/LookupOp/IntImageReverseTest.java new file mode 100644 index 000000000..62de16838 --- /dev/null +++ b/test/java/awt/image/LookupOp/IntImageReverseTest.java @@ -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; + } +} -- GitLab