[ 
https://issues.apache.org/jira/browse/SANSELAN-56?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13259844#comment-13259844
 ] 

Gary Lucas commented on SANSELAN-56:
------------------------------------

Damjan,

I entered a new Tracker Item (#75) for the change to the photometric 
interpreter.  That completes the last of the changes I originally posted for 
this item.  So I think you can close or reject this item as you see fit.    

Gary


                
> proposed enhancement reduces load time for some image files by 40 percent
> -------------------------------------------------------------------------
>
>                 Key: SANSELAN-56
>                 URL: https://issues.apache.org/jira/browse/SANSELAN-56
>             Project: Commons Sanselan
>          Issue Type: Improvement
>         Environment: Tested in Windows, Linux, MacOS
>            Reporter: Gary Lucas
>              Labels: api-change
>         Attachments: Sanselan-56-SpeedEnhanceTiff.patch
>
>   Original Estimate: 48h
>  Remaining Estimate: 48h
>
> I have identified an enhancement that reduces the time required to load TIFF 
> image by 40 percent.  I have tested a modified version of Sanselan under 
> Windows, Linux, and MacOS with consistent savings on each platform.  
> Additionally, I suspect that this technique may be applicable to other areas 
> of the Sanselan code base, including more popular image formats supported by 
> Sanselan such as JPEG, PNG, etc.
> I propose to add the relevant code changes to the Sanselan code base.  Once 
> these modifications are in place, there would be an opportunity for others to 
> look at the pro's and cons' of applying the techniques to other data formats.
> The Enhancement
> To load an image from a TIFF file, Sanselan performs extensive data 
> processing in order to obtain RGB values for the pixels in the output image. 
> The code for that processing appears to be well written and efficient. Once 
> the RGB value are obtained, they are stored in a Java BufferedImage using a 
> call  to the setRGB() method.
> Unfortunately, setRGB() is an extremely inefficient method.   A much, much 
> better approach is to store the data into an integer array and defer the 
> creation of the buffered image until all information for the image has been 
> collected.    Java has a nice (though somewhat obscure) API that lets memory 
> in an integer array be transferred directly to a BufferedImage so that the 
> system does not have to allocate additional memory for this procedure (a very 
> nice feature when dealing with huge images).  This change virtually 
> eliminated the overhead for transferring data to images, which accounted for 
> 40 percent of the time required to load images.  For TIFF files, this was a 
> reasonable approach because the TiffImageParser class always loads 4-byte 
> image  and the getGrayscaleBufferedImage() method is never used.  I have not 
> investigated the code for the other renders, but some refinement might be 
> needed for the one-byte grayscale images.
> Steps to Integration
> In sanselan.common, a new class called ImagePrep was created.  ImagePrep 
> carries a width, height, and an integer array for storing pixels.  It 
> provides its own setRGB() method which looks just like the one in 
> BufferedImage.   Finally, it provides a method called getBufferedImage() 
> which creates a BufferedImage from its internal the integer array when the 
> processing is complete.
> In the TiffImageParser classes, data is read from input stream and 
> transferred to pixel values in a series of classes known as 
> PhotometricInterpreters.  These were modified to operate on ImagePrep objects 
> rather than BufferedImage objects.  The DataReader and TiffImageParser 
> classes were modified to pass ImagePrep objects into the photometric 
> interpreters rather than using BufferedImages.
> At the very last step, before passing its result back to the calling method 
> (the Sanselan main class, etc.), the TiffImageParser used the 
> ImagePrep.getBufferedImage() to convert the result to the expected form.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to