Solved

Applet.getImage() faster alternative

Posted on 2004-10-18
21
841 Views
Last Modified: 2008-03-17
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
Comment
Question by:funnyveryfunny
  • 10
  • 5
  • 3
  • +1
21 Comments
 
LVL 92

Expert Comment

by:objects
Comment Utility
add your images to a jar and load them from there
0
 
LVL 92

Assisted Solution

by:objects
objects earned 20 total points
Comment Utility
to load from jar use:
getImage(getClass().getResource(imagename));
0
 
LVL 4

Author Comment

by:funnyveryfunny
Comment Utility
thanx but my Image list is growing all the time so this would not be ideal.
0
 
LVL 4

Author Comment

by:funnyveryfunny
Comment Utility
I'm reading Javadoc on ImageInputStream and ImageIO, would this be any good?
0
 
LVL 92

Expert Comment

by:objects
Comment Utility
i doubt they'd make any difference.
0
 
LVL 4

Author Comment

by:funnyveryfunny
Comment Utility
ImageIO provides a read() that returns BufferedImage which is fine but does it improve on speed?
0
 
LVL 4

Author Comment

by:funnyveryfunny
Comment Utility
oh wise one, in your experience what shall I do?

Stick with Applet.getImage() and hope that user doesn't mind.
Use filecache?
0
 
LVL 14

Expert Comment

by:Tommy Braas
Comment Utility
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
 
LVL 92

Expert Comment

by:objects
Comment Utility
> 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
 
LVL 4

Author Comment

by:funnyveryfunny
Comment Utility
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 4

Author Comment

by:funnyveryfunny
Comment Utility
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
 
LVL 92

Expert Comment

by:objects
Comment Utility
> 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
 
LVL 14

Accepted Solution

by:
Tommy Braas earned 20 total points
Comment Utility
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
 
LVL 4

Author Comment

by:funnyveryfunny
Comment Utility
thanx Objects, I gave up on the idea of "speedy gonzalez" :-(

What about image loading progress? please advice.
0
 
LVL 4

Author Comment

by:funnyveryfunny
Comment Utility
I'll look at the links now.
Thanx.
0
 
LVL 9

Assisted Solution

by:Ovi
Ovi earned 20 total points
Comment Utility
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
 
LVL 4

Author Comment

by:funnyveryfunny
Comment Utility
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
 
LVL 9

Expert Comment

by:Ovi
Comment Utility
... 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
 
LVL 4

Author Comment

by:funnyveryfunny
Comment Utility
Ovi, something for the future.

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

thank you all.
0
 
LVL 14

Expert Comment

by:Tommy Braas
Comment Utility
=-)
0
 
LVL 9

Expert Comment

by:Ovi
Comment Utility
That's cool. Thank you :)
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
bunnyEars2 challenge 6 66
firstChar challenge 13 82
bitbucket vs gitbucket 3 28
Groovy:unable to resolve class error 2 27
INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now