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

ClassCastException when drawing scaled image to Graphics2D

XMLWordPrintable

    • 2d
    • x86_64
    • windows_10

      ADDITIONAL SYSTEM INFORMATION :
      Dell Precision 5530, Core i7-8850H (2.6GHz), 32GB RAM
      Windows 10 Enterprise (10.0.16299 Build 16299)
      Java version installed: OpenJDK 11.0.4 (Also seen on OpenJDK 11.0.6 on other computers)

      A DESCRIPTION OF THE PROBLEM :
      A specific image, when scaled, throws a class cast exception when attempting to fetch the image within the drawImage Function.
      Other images used do not throw this exception.
      When getScaledInstance is not used, the exception does not occur

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run source code, passing in the file location as a parameter
      I've only seen this with one png file, but I don't see a way to upload any content

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      No exceptions when drawing image
      ACTUAL -
      Uncaught error fetching image:
      java.lang.ClassCastException: [I cannot be cast to [B
      at java.awt.image.ColorModel.getAlpha(ColorModel.java:838)
      at java.awt.image.ColorModel.getRGB(ColorModel.java:883)
      at sun.awt.image.ImageRepresentation.convertToRGB(ImageRepresentation.java:305)
      at sun.awt.image.ImageRepresentation.setPixels(ImageRepresentation.java:569)
      at java.awt.image.AreaAveragingScaleFilter.accumPixels(AreaAveragingScaleFilter.java:213)
      at java.awt.image.AreaAveragingScaleFilter.setPixels(AreaAveragingScaleFilter.java:252)
      at sun.awt.image.ImageDecoder.setPixels(ImageDecoder.java:126)
      at sun.awt.image.PNGImageDecoder.sendPixels(PNGImageDecoder.java:558)
      at sun.awt.image.PNGImageDecoder.produceImage(PNGImageDecoder.java:478)
      at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:269)
      at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
      at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)

      ---------- BEGIN SOURCE ----------
      import javax.swing.*;
      import java.awt.*;
      import java.io.File;

      public class Main {

          private static final int SIZE = 200;
          public static void main(String[] args) {
              if (args.length < 1) {
                  System.out.println("Only argument is filename");
                  return;
              }
              String imageFile = args[0];

              File f = new File(imageFile);
              ImageIcon tmpImage = new ImageIcon(f.getPath());
              Image img = tmpImage.getImage();//.getScaledInstance(SIZE - 6, SIZE - 6, Image.SCALE_SMOOTH);
              img = img.getScaledInstance(SIZE - 6, SIZE - 6, Image.SCALE_SMOOTH);
              drawImage(img);
          }

          private static void drawImage(Image img) {
              JFrame tFrame = new JFrame();
              tFrame.setSize( new Dimension(SIZE, SIZE) );
              JPanel tPanel = new JPanel(){
                  public void paint(Graphics g) {
                      g.drawImage(img, 0, 0, tFrame);
                  }
              };
              tPanel.setLayout( new BorderLayout() );
              tFrame.add( tPanel );
              tFrame.setVisible(true);
              tFrame.invalidate();
          }
      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Select different image or do not scale

      FREQUENCY : always


        1. Main.java
          1 kB
        2. index3.png
          index3.png
          4 kB
        3. index2.png
          index2.png
          7 kB
        4. index1.png
          index1.png
          5 kB

            prr Philip Race
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: