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.
LVL 4
funnyveryfunnyAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
Tommy BraasConnect With a Mentor Commented:
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
 
objectsCommented:
add your images to a jar and load them from there
0
 
objectsConnect With a Mentor Commented:
to load from jar use:
getImage(getClass().getResource(imagename));
0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
funnyveryfunnyAuthor Commented:
thanx but my Image list is growing all the time so this would not be ideal.
0
 
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
 
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
 
OviConnect With a Mentor Commented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.