-
Bug
-
Resolution: Fixed
-
P4
-
1.3.0, 1.3.1, 1.4.0, 1.4.1, 1.4.1_01, 1.4.2
-
tiger
-
generic, x86, sparc
-
generic, linux, solaris_7, solaris_8, windows_nt, windows_2000, windows_xp
Name: jk109818 Date: 01/28/2003
FULL PRODUCT VERSION :
java version "1.4.0_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_01-b03)
Java HotSpot(TM) Client VM (build 1.4.0_01-b03, mixed mode)
FULL OPERATING SYSTEM VERSION :
Microsoft Windows 2000 [Version 5.00.2195]
A DESCRIPTION OF THE PROBLEM :
The current PNG decoder processes images with 4bpp
incorrectly. Actually I found this problem when using J2ME
PBP 1.0, and also found the same problem occurring in J2SE
1.4.1_01. So I'll describe the problem based on the source
code that comes with J2ME PBP 1.0.
In the source code of sun.awt.image.PNGImageDecoder, please
see 436 line. Near the end of the line, ... &7 is present.
Actually 7 should have been 15. Otherwise, some PNG images
with bitdepth 4 won't be decoded correctly. Showing
incorrect colors.
case 4:
bPixels[col+rowOffset] = (byte)((rowByteBuffer[spos>>1]>>
((1-(spos&1))*4))&7); // --> Replace &7 to &15
spos++;
break;
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Please execute the class the source of which is included
below. Then an image file named 'a.png' will be created in
the directory where you run the class.
Try to display the image on screen using some appropriate
code. You may use FileChooserDemo included in J2SDK with
preview on.
EXPECTED VERSUS ACTUAL BEHAVIOR :
The arrow is yellow, and there are some very dark grey
shadow around it. But when seen with Java, the shadow
becomes yellow.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.*;
public class ImageWriter {
public static byte[] data = {
(byte) 0x89, (byte) 0x50, (byte) 0x4e, (byte) 0x47, (byte) 0xd, (byte) 0xa,
(byte) 0x1a, (byte) 0xa, (byte) 0x0,
(byte) 0x0, (byte) 0x0, (byte) 0xd, (byte) 0x49, (byte) 0x48, (byte) 0x44,
(byte) 0x52, (byte) 0x0,
(byte) 0x0, (byte) 0x0, (byte) 0x33, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte)
0x36, (byte) 0x4,
(byte) 0x3, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x98, (byte) 0x42,
(byte) 0xbc, (byte) 0xaa,
(byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x3, (byte) 0x73, (byte) 0x42,
(byte) 0x49, (byte) 0x54,
(byte) 0x8, (byte) 0x8, (byte) 0x8, (byte) 0xdb, (byte) 0xe1, (byte) 0x4f,
(byte) 0xe0, (byte) 0x0,
(byte) 0x0, (byte) 0x0, (byte) 0x2a, (byte) 0x50, (byte) 0x4c, (byte) 0x54,
(byte) 0x45, (byte) 0xff,
(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xdf, (byte) 0x0, (byte) 0xbf,
(byte) 0xdf, (byte) 0x0,
(byte) 0xbf, (byte) 0xbf, (byte) 0x0, (byte) 0xbf, (byte) 0x9f, (byte) 0x0,
(byte) 0x7f, (byte) 0x9f,
(byte) 0x0, (byte) 0x7f, (byte) 0x7f, (byte) 0x0, (byte) 0x7f, (byte) 0x5f,
(byte) 0x0, (byte) 0x55,
(byte) 0x55, (byte) 0x55, (byte) 0x3f, (byte) 0x5f, (byte) 0x0, (byte) 0x3f,
(byte) 0x3f, (byte) 0x0,
(byte) 0x2a, (byte) 0x2a, (byte) 0x2a, (byte) 0x0, (byte) 0x1f, (byte) 0x0,
(byte) 0x0, (byte) 0x0,
(byte) 0x0, (byte) 0x1b, (byte) 0xdb, (byte) 0x78, (byte) 0x80, (byte) 0x0,
(byte) 0x0, (byte) 0x0,
(byte) 0xe, (byte) 0x74, (byte) 0x52, (byte) 0x4e, (byte) 0x53, (byte) 0x0,
(byte) 0xff, (byte) 0xff,
(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
(byte) 0xff, (byte) 0xff,
(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x57, (byte) 0x4a, (byte) 0xdb,
(byte) 0x14, (byte) 0x0,
(byte) 0x0, (byte) 0x0, (byte) 0x9, (byte) 0x70, (byte) 0x48, (byte) 0x59,
(byte) 0x73, (byte) 0x0,
(byte) 0x0, (byte) 0xa, (byte) 0xf0, (byte) 0x0, (byte) 0x0, (byte) 0xa, (byte)
0xf0, (byte) 0x1,
(byte) 0x42, (byte) 0xac, (byte) 0x34, (byte) 0x98, (byte) 0x0, (byte) 0x0,
(byte) 0x0, (byte) 0x16,
(byte) 0x74, (byte) 0x45, (byte) 0x58, (byte) 0x74, (byte) 0x43, (byte) 0x72,
(byte) 0x65, (byte) 0x61,
(byte) 0x74, (byte) 0x69, (byte) 0x6f, (byte) 0x6e, (byte) 0x20, (byte) 0x54,
(byte) 0x69, (byte) 0x6d,
(byte) 0x65, (byte) 0x0, (byte) 0x30, (byte) 0x33, (byte) 0x2f, (byte) 0x30,
(byte) 0x37, (byte) 0x2f,
(byte) 0x30, (byte) 0x31, (byte) 0xc5, (byte) 0xe5, (byte) 0xf5, (byte) 0xd2,
(byte) 0x0, (byte) 0x0,
(byte) 0x0, (byte) 0x21, (byte) 0x74, (byte) 0x45, (byte) 0x58, (byte) 0x74,
(byte) 0x53, (byte) 0x6f,
(byte) 0x66, (byte) 0x74, (byte) 0x77, (byte) 0x61, (byte) 0x72, (byte) 0x65,
(byte) 0x0, (byte) 0x4d,
(byte) 0x61, (byte) 0x63, (byte) 0x72, (byte) 0x6f, (byte) 0x6d, (byte) 0x65,
(byte) 0x64, (byte) 0x69,
(byte) 0x61, (byte) 0x20, (byte) 0x46, (byte) 0x69, (byte) 0x72, (byte) 0x65,
(byte) 0x77, (byte) 0x6f,
(byte) 0x72, (byte) 0x6b, (byte) 0x73, (byte) 0x20, (byte) 0x33, (byte) 0x2e,
(byte) 0x30, (byte) 0xef,
(byte) 0x69, (byte) 0x31, (byte) 0xf0, (byte) 0x0, (byte) 0x0, (byte) 0x1,
(byte) 0xb3, (byte) 0x49,
(byte) 0x44, (byte) 0x41, (byte) 0x54, (byte) 0x78, (byte) 0x9c, (byte) 0xcd,
(byte) 0xd3, (byte) 0xcd,
(byte) 0x4a, (byte) 0xc3, (byte) 0x40, (byte) 0x10, (byte) 0x7, (byte) 0xf0,
(byte) 0x5e, (byte) 0x94,
(byte) 0x42, (byte) 0x4e, (byte) 0x43, (byte) 0x14, (byte) 0xbc, (byte) 0x1a,
(byte) 0xf1, (byte) 0x1,
(byte) 0xca, (byte) 0x34, (byte) 0x45, (byte) 0xf4, (byte) 0x24, (byte) 0x86,
(byte) 0xa0, (byte) 0xc7,
(byte) 0xa2, (byte) 0xed, (byte) 0xc5, (byte) 0x4b, (byte) 0xad, (byte) 0xb8,
(byte) 0x45, (byte) 0x7b,
(byte) 0xb7, (byte) 0xf8, (byte) 0x71, (byte) 0xa8, (byte) 0xf4, (byte) 0xe8,
(byte) 0x1b, (byte) 0xf8,
(byte) 0x71, (byte) 0x15, (byte) 0x31, (byte) 0xd, (byte) 0x14, (byte) 0xac,
(byte) 0xa5, (byte) 0x65,
(byte) 0xf0, (byte) 0x2c, (byte) 0x68, (byte) 0x7d, (byte) 0x1, (byte) 0x6b,
(byte) 0xde, (byte) 0xc5,
(byte) 0xec, (byte) 0x6e, (byte) 0xd2, (byte) 0x24, (byte) 0x3a, (byte) 0xbd,
(byte) 0xbb, (byte) 0xa7,
(byte) 0x2c, (byte) 0x3f, (byte) 0xe6, (byte) 0xbf, (byte) 0xbb, (byte) 0xb3,
(byte) 0x9b, (byte) 0x5c,
(byte) 0xee, (byte) 0xff, (byte) 0x8d, (byte) 0x72, (byte) 0x6d, (byte) 0x96,
(byte) 0xe4, (byte) 0x61,
(byte) 0x69, (byte) 0x16, (byte) 0x3d, (byte) 0x83, (byte) 0x49, (byte) 0xc4,
(byte) 0xd3, (byte) 0x1,
(byte) 0x40, (byte) 0x8d, (byte) 0xa7, (byte) 0xfc, (byte) 0x32, (byte) 0xc0,
(byte) 0x1a, (byte) 0xf5,
(byte) 0x38, (byte) 0x7a, (byte) 0x1, (byte) 0xb0, (byte) 0x56, (byte) 0xf9,
(byte) 0xc4, (byte) 0x2b,
(byte) 0x0, (byte) 0x13, (byte) 0x2f, (byte) 0xb8, (byte) 0x32, (byte) 0xa3,
(byte) 0x0, (byte) 0x88,
(byte) 0xb8, (byte) 0xce, (byte) 0xd1, (byte) 0x3c, (byte) 0x60, (byte) 0xd1,
(byte) 0x71, (byte) 0x5c,
(byte) 0x2e, (byte) 0xb1, (byte) 0xbe, (byte) 0xe2, (byte) 0x8, (byte) 0x21,
(byte) 0x8e, (byte) 0xb8,
(byte) 0xc4, (byte) 0x5d, (byte) 0x5b, (byte) 0xb4, (byte) 0x5a, (byte) 0x2d,
(byte) 0xd1, (byte) 0x64,
(byte) 0x68, (byte) 0x70, (byte) 0xf3, (byte) 0x34, (byte) 0x1e, (byte) 0x8f,
(byte) 0xdf, (byte) 0x3d,
(byte) 0x26, (byte) 0x90, (byte) 0x28, (byte) 0x50, (byte) 0xe3, (byte) 0xf1,
(byte) 0xb7, (byte) 0xd,
(byte) 0x7b, (byte) 0x31, (byte) 0x61, (byte) 0x33, (byte) 0x9b, (byte) 0x68,
(byte) 0x60, (byte) 0x3b,
(byte) 0x26, (byte) 0x58, (byte) 0x6c, (byte) 0x67, (byte) 0xb7, (byte) 0x7,
(byte) 0xd7, (byte) 0xa4,
(byte) 0x8d, (byte) 0x0, (byte) 0x4a, (byte) 0xe9, (byte) 0xb2, (byte) 0xe,
(byte) 0x98, (byte) 0x92,
(byte) 0xd4, (byte) 0x0, (byte) 0x80, (byte) 0xed, (byte) 0x44, (byte) 0xe6,
(byte) 0xc2, (byte) 0x16,
(byte) 0xdd, (byte) 0xa6, (byte) 0xc8, (byte) 0x6c, (byte) 0xc6, (byte) 0x92,
(byte) 0x2f, (byte) 0x84,
(byte) 0x33, (byte) 0x2f, (byte) 0xa6, (byte) 0xb0, (byte) 0xff, (byte) 0xb0,
(byte) 0x70, (byte) 0x1d,
(byte) 0x6d, (byte) 0xa1, (byte) 0x1c, (byte) 0x4e, (byte) 0x6c, (byte) 0x2f,
(byte) 0xea, (byte) 0x90,
(byte) 0xb1, (byte) 0xc, (byte) 0x96, (byte) 0x85, (byte) 0x25, (byte) 0x52,
(byte) 0x27, (byte) 0xaf,
(byte) 0xcb, (byte) 0x8, (byte) 0xdb, (byte) 0x4f, (byte) 0xc8, (byte) 0x44,
(byte) 0xc7, (byte) 0xd1,
(byte) 0x27, (byte) 0x97, (byte) 0x84, (byte) 0xa5, (byte) 0x14, (byte) 0xa1,
(byte) 0x2b, (byte) 0x8e,
(byte) 0x75, (byte) 0xd5, (byte) 0x30, (byte) 0xbc, (byte) 0xb, (byte) 0x74,
(byte) 0xfd, (byte) 0x49,
(byte) 0x44, (byte) 0xd6, (byte) 0x8a, (byte) 0x2b, (byte) 0xce, (byte) 0x3c,
(byte) 0x4d, (byte) 0x34,
(byte) 0xd8, (byte) 0xca, (byte) 0x92, (byte) 0x38, (byte) 0xeb, (byte) 0x6,
(byte) 0x13, (byte) 0x4d,
(byte) 0xf4, (byte) 0xb0, (byte) 0xe7, (byte) 0xa4, (byte) 0xc8, (byte) 0x6e,
(byte) 0x74, (byte) 0x83,
(byte) 0x29, (byte) 0x7d, (byte) 0x9f, (byte) 0x56, (byte) 0xaa, (byte) 0x53,
(byte) 0xc2, (byte) 0xea,
(byte) 0x79, (byte) 0x90, (byte) 0x50, (byte) 0xf0, (byte) 0x25, (byte) 0xc4,
(byte) 0x94, (byte) 0x8a,
(byte) 0xd, (byte) 0x5f, (byte) 0xf6, (byte) 0x2b, (byte) 0xa2, (byte) 0xd7,
(byte) 0xe0, (byte) 0x2d,
(byte) 0xa1, (byte) 0xca, (byte) 0xa5, (byte) 0x6a, (byte) 0xa5, (byte) 0x9a,
(byte) 0x19, (byte) 0xb2,
(byte) 0xaf, (byte) 0xf, (byte) 0x53, (byte) 0x1a, (byte) 0x7d, (byte) 0x2a,
(byte) 0xd1, (byte) 0x97,
(byte) 0xad, (byte) 0x7b, (byte) 0x1e, (byte) 0x9f, (byte) 0x8b, (byte) 0xd4,
(byte) 0x4a, (byte) 0x11,
(byte) 0xa9, (byte) 0xc8, (byte) 0x84, (byte) 0x5e, (byte) 0xe3, (byte) 0x95,
(byte) 0xa2, (byte) 0x48,
(byte) 0x39, (byte) 0xfe, (byte) 0x7c, (byte) 0x27, (byte) 0xf3, (byte) 0x5c,
(byte) 0x14, (byte) 0x91,
(byte) 0x16, (byte) 0x45, (byte) 0x9b, (byte) 0xa0, (byte) 0xc6, (byte) 0x6,
(byte) 0x11, (byte) 0x65,
(byte) 0xde, (byte) 0x5b, (byte) 0x68, (byte) 0x65, (byte) 0x25, (byte) 0xe6,
(byte) 0x7e, (byte) 0xb6,
(byte) 0x48, (byte) 0x59, (byte) 0x47, (byte) 0x89, (byte) 0xed, (byte) 0xd1,
(byte) 0xdf, (byte) 0x37,
(byte) 0x2a, (byte) 0xef, (byte) 0x1a, (byte) 0x8a, (byte) 0x3b, (byte) 0xbf,
(byte) 0x6b, (byte) 0xd4,
(byte) 0xf2, (byte) 0xf5, (byte) 0xf0, (byte) 0x76, (byte) 0xab, (byte) 0x77,
(byte) 0x1f, (byte) 0x1c,
(byte) 0xf5, (byte) 0x11, (byte) 0xed, (byte) 0xc6, (byte) 0x67, (byte) 0xc0,
(byte) 0xd1, (byte) 0x8,
(byte) 0xb1, (byte) 0x7a, (byte) 0x12, (byte) 0xb0, (byte) 0x44, (byte) 0x87,
(byte) 0x45, (byte) 0xe1,
(byte) 0xcb, (byte) 0x1e, (byte) 0x31, (byte) 0xd4, (byte) 0x77, (byte) 0xc2,
(byte) 0xbc, (byte) 0x9,
(byte) 0xf3, (byte) 0x13, (byte) 0x19, (byte) 0x34, (byte) 0xd2, (byte) 0x79,
(byte) 0xcc, (byte) 0x1f,
(byte) 0x4b, (byte) 0x24, (byte) 0xee, (byte) 0xd9, (byte) 0xa5, (byte) 0x24,
(byte) 0xd, (byte) 0xf8,
(byte) 0xbc, (byte) 0xe8, (byte) 0x4a, (byte) 0xd9, (byte) 0x3c, (byte) 0xf5,
(byte) 0x48, (byte) 0xb8,
(byte) 0xfd, (byte) 0x69, (byte) 0xa2, (byte) 0x19, (byte) 0x45, (byte) 0xfa,
(byte) 0xd6, (byte) 0x12,
(byte) 0xfa, (byte) 0x1, (byte) 0xeb, (byte) 0xdc, (byte) 0x37, (byte) 0x13,
(byte) 0xe3, (byte) 0x93,
(byte) 0x67, (byte) 0xb7, (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0,
(byte) 0x49, (byte) 0x45,
(byte) 0x4e, (byte) 0x44, (byte) 0xae, (byte) 0x42, (byte) 0x60, (byte) 0x82
};
public static void main(String[] args) throws IOException {
FileOutputStream out = new FileOutputStream("a.png");
out.write(data);
out.close();
}
}
---------- END SOURCE ----------
(Review ID: 179425)
======================================================================
- duplicates
-
JDK-4830492 PNG decoder dos not handle indexed images with less than 8 bits per pixel
-
- Closed
-
-
JDK-4307550 PNG Transparency ignored
-
- Closed
-
- relates to
-
JDK-4826548 PNG-files with 5,6,7, or 8 colors in the palette cannot be loaded
-
- Resolved
-