Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4809676

PNGDecoder does not handle indexed images with less than 8 bits per pixel

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 5.0
    • 1.3.0, 1.3.1, 1.4.0, 1.4.1, 1.4.1_01, 1.4.2
    • client-libs
    • 2d
    • 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)
      ======================================================================

            bae Andrew Brygin
            jkimsunw Jeffrey Kim (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: