Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 891
  • Last Modified:

Applet.getImage() faster alternative

Hello,

Is there any faster method than Applet.getImage()?

I'm writing an applet that displays images like a gallery, but I find Applet.getImage() a bit slow. Each of my image is about 100k or (800x600) so I know it will take time. But it is relatively slower than the speed of a Browser.

Size of image is important for quality wise, so is there any other way? Thought about using BufferedReader to read in stream then construct the image, would this be faster?

Thanks.
0
funnyveryfunny
Asked:
funnyveryfunny
  • 10
  • 5
  • 3
  • +1
3 Solutions
 
objectsCommented:
add your images to a jar and load them from there
0
 
objectsCommented:
to load from jar use:
getImage(getClass().getResource(imagename));
0
 
funnyveryfunnyAuthor Commented:
thanx but my Image list is growing all the time so this would not be ideal.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
funnyveryfunnyAuthor Commented:
I'm reading Javadoc on ImageInputStream and ImageIO, would this be any good?
0
 
objectsCommented:
i doubt they'd make any difference.
0
 
funnyveryfunnyAuthor Commented:
ImageIO provides a read() that returns BufferedImage which is fine but does it improve on speed?
0
 
funnyveryfunnyAuthor Commented:
oh wise one, in your experience what shall I do?

Stick with Applet.getImage() and hope that user doesn't mind.
Use filecache?
0
 
Tommy BraasCommented:
Hi funnyveryfunny,

I'm assuming that you're creating an image viewer applet to show pictures from an album.

I am not sure that there are any metrics available for image loading times using the various I/O sources vs. getImage(). I would recommend that you measure and see how it goes.

\t
0
 
objectsCommented:
> ImageIO provides a read() that returns BufferedImage which is fine but does it improve on speed?

I doubt it, its probably using thew same mechanism to perform the download.
0
 
funnyveryfunnyAuthor Commented:
Thanx orangehead911,
I'm looking into how I can retrieve Image metric data to display in JProgress bar while its loading.
Can you shed some lights?
0
 
funnyveryfunnyAuthor Commented:
looks like I have to give up on that.

Now the least I can do for the poor viewers is to indicate some progress while they sat there wondering what's going on here? So how do show image loading progress using JProgressBar.
0
 
objectsCommented:
> thanx but my Image list is growing all the time so this would not be ideal.

you could rebuild your jar when your image list changed.
0
 
Tommy BraasCommented:
funnyveryfunny,

If you use ImageIO you can utilize a IIOReadProgressListener. Not sure exactly how to do that (haven't needed to), but look here http://java.sun.com/j2se/1.4.2/docs/api/javax/imageio/event/IIOReadProgressListener.html

There's also an article on Java.sun on ImageIO: http://java.sun.com/j2se/1.4.2/docs/guide/imageio/spec/imageio_guideTOC.fm.html

\t
0
 
funnyveryfunnyAuthor Commented:
thanx Objects, I gave up on the idea of "speedy gonzalez" :-(

What about image loading progress? please advice.
0
 
funnyveryfunnyAuthor Commented:
I'll look at the links now.
Thanx.
0
 
OviCommented:
When you request the image from your server, the http header should return the total file length. Use a normal download procedure to read the bytes of the image and notify the progress periodically. After the image is loaded, you can buil'it from it's byte array.

A way of faster download, is to use multiple threads to get the image. Supposing your image is 100 kb long, you could have 5 threads reading the image parts from 0-19 kb, 20-39 kb, ... up to 80-99 kb.  For this to be possible you have to make sure your server supports multipart downloads. If you are interested in this technique, please review the http protocol specifications for file transfer, and as an example look at FlashGet download manager.
The output of each download thread will lead you to the solution.
0
 
funnyveryfunnyAuthor Commented:
Thanx Ovi, at the moment I'm intending to place the applet with www.geocities.com free service but in the future this could be any where so I dont want it as a server-dependent program.

I have tested the image loading progress using IIOReadProgressListener, although the documentation is not very specific I managed to implement a console version therefore give me a bit of time before I finalise this question.

In the mean time, thank you.
0
 
OviCommented:
... you can try anyway with the multiple threads option. Usually all servers are upgraded to use the latest http protocol ....
And if the server is not using it, you can just use a single thread model to download. If your implementation is general enough, the applet will be capable of behaving in different ways, depending on the situation.
0
 
funnyveryfunnyAuthor Commented:
Ovi, something for the future.

I decided to use ImageIO and ImageReader methods, cut down loading time by approx half.

thank you all.
0
 
Tommy BraasCommented:
=-)
0
 
OviCommented:
That's cool. Thank you :)
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 10
  • 5
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now