[
https://issues.apache.org/jira/browse/SANSELAN-56?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13222822#comment-13222822
]
Gary Lucas commented on SANSELAN-56:
------------------------------------
Damjan,
So far, all the samples I've located have copyrights or are proprietary. I'm
still looking.
>From a purely personal motivation, it looks like the system that produces the
>TIFF files that I'm required to process is going to be end-of-lifed pretty
>soon. So I won't be pressing for the feature if nobody else sees a need.
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