bug-classpath
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]