-
Bug
-
Resolution: Unresolved
-
P4
-
8, 11, 14, 15
-
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
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