[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug awt/28751] New: Major BufferedImage regression
From: |
hendrich at informatik dot uni-hamburg dot de |
Subject: |
[Bug awt/28751] New: Major BufferedImage regression |
Date: |
16 Aug 2006 08:55:58 -0000 |
My image viewer application uses BufferedImage(s) of TYPE_INT_RGB
for all pixel access and image filters. See:
http://tams-www.informatik.uni-hamburg.de/personal/hendrich/niffler/
Unfortunately, a cvs change made between 2006.08.08 and 2006.08.10 results
in both a major performance regression and a memory leak. Classpath is now
completely unuseable for my test applications.
(1) Image "conversion" time went from a few milliseconds to minutes
(jamvm) for medium-sized images.
(2) Image conversion for 2000x3000 images crashes with OutOfMemoryException
even with -Xmx300m.
java.lang.OutOfMemoryError
at
java.awt.image.SinglePixelPackedSampleModel.getPixels(SinglePixelPackedSampleModel.java:378)
at java.awt.image.Raster.getPixels(Raster.java:737)
at java.awt.image.BufferedImage.copyData(BufferedImage.java:375)
at java.awt.image.BufferedImage.getData(BufferedImage.java:403)
at
gnu.java.awt.peer.gtk.BufferedImageGraphics.<init>(BufferedImageGraphics.java:149)
at
gnu.java.awt.peer.gtk.GdkGraphicsEnvironment.createGraphics(GdkGraphicsEnvironment.java:110)
at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:385)
at niffler.ImageUtils.getBufferedImageRGB(ImageUtils.java:396)
The method in question is ImageUtils.getBufferedImageRGB():
public static BufferedImage getBufferedImageRGB( Image image ) {
if (image == null) return null;
if (image instanceof BufferedImage) {
BufferedImage bi = (BufferedImage) image;
if (bi.getType() == BufferedImage.TYPE_INT_RGB) return bi;
}
// not a BufferedImage, or not the requested type. We create a new
// BufferedImage, and draw the given image into it.
//
long t1 = System.currentTimeMillis();
int w = image.getWidth( null );
int h = image.getHeight( null );
if ((w <= 0) || (h <= 0)) {
msg( "-E- getBufferedImage: input image has w<=0 and h<=0.");
msg( " w= " + w + " h= " + h + " image= " + image );
return null;
}
BufferedImage tmp = new BufferedImage( w,h,BufferedImage.TYPE_INT_RGB );
Graphics g = tmp.createGraphics();
g.drawImage( image, 0, 0, null );
g.dispose();
long t2 = System.currentTimeMillis();
ImageUtils.msg(
"-#- ImageUtils.getBufferedImageRGB took " + (t2-t1) + " msec.");
return tmp;
}
--
Summary: Major BufferedImage regression
Product: classpath
Version: unspecified
Status: UNCONFIRMED
Severity: critical
Priority: P3
Component: awt
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: hendrich at informatik dot uni-hamburg dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28751
- [Bug awt/28751] New: Major BufferedImage regression,
hendrich at informatik dot uni-hamburg dot de <=