Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 5.0.2
-
Fix Version/s: 5.0.3
-
Component/s: Core/Parsing
-
Labels:None
-
Environment:any
Description
When an image is drawn by the ImageReference class there is a catch for Throwable, generally the only way to get to the catch is a out of memory error. A client submited a file that looked considerably better when rendering using a restricted memory which caused the catch clause to execute.
In this catch clause the image is scaled in size using a very simple algorithm. The interesting thing about the scale is that it uses surprising little memory and the next call to paint generally executes correctly.
In this catch clause the image is scaled in size using a very simple algorithm. The interesting thing about the scale is that it uses surprising little memory and the next call to paint generally executes correctly.
Activity
Patrick Corless
created issue -
Patrick Corless
made changes -
Field | Original Value | New Value |
---|---|---|
Fix Version/s | 5.0.3 [ 11070 ] |
Patrick Corless
made changes -
Status | Open [ 1 ] | Resolved [ 5 ] |
Resolution | Fixed [ 1 ] |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #37314 | Tue Aug 06 15:07:08 MDT 2013 | patrick.corless | |
Files Changed | ||||
MODIFY
/icepdf/branches/icepdf-5.0.1/icepdf/core/src/org/icepdf/core/pobjects/graphics/ImageReferenceFactory.java
ADD /icepdf/branches/icepdf-5.0.1/icepdf/core/src/org/icepdf/core/pobjects/graphics/SmoothScaledImageReference.java |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #37475 | Wed Aug 21 13:01:07 MDT 2013 | patrick.corless | |
Files Changed | ||||
ADD
/icepdf/trunk/icepdf/core/src/org/icepdf/core/pobjects/graphics/SmoothScaledImageReference.java
MODIFY /icepdf/trunk/icepdf/core/src/org/icepdf/core/pobjects/graphics/ImageReferenceFactory.java |
Patrick Corless
made changes -
Status | Resolved [ 5 ] | Closed [ 6 ] |
The algorithm is quite simple
if (width > 1000 && width < 2000)
{ width = 1000; }else if (width > 2000)
{ width = 2000; }scaledImage = image.getScaledInstance(
width, -1, Image.SCALE_SMOOTH);
But the net effect can be a significant reduction in memory consumption during the paint. I expect this algorithm to be improved over time.