Thanks, this is quite useful.
You are welcome. You will find that people in Java newsgroups are much
more friendly and eager to help than in C++ newsgroups (and I am
talking from the viewpoint of *recipient* of advice and plenty of
useful help). I blame this sad situation on the destruction that
Microsoft made on the C++ language. Fortunately their attempted
destruction of Java was derailed just in time. The victims of this
debacle -a tragedy, really- usually hang out comp.lang.c++. They seem
to have deep war wounds and are very asocial.
Anywho... let's leave politics aside.
I might have good reasons to keep this in Java, so in case my
JAI implementation is "good enough", my original question still
applys: Can I speed things by choosing specific hardware?
I do not have any specifics, but keep in mind that even if you somehow
manage to buy hardware that will be available in 2012, the performance
gains from not using Java will be far superior. I tried to run my
application on hardware with plenty of horsepower, and still was
painfully slow. If your app is ready, just borrow the most powerful PC
you can get, and see it for yourself. That's what I did.
Then: Are there Java alternatives to JAI that might perform better,
or is the (lack of) image processing performance inherently related
to the existence of the VM?
You still have one way of eating your cake and eating it, too. You may
keep all the non-critical (in terms of raw performance) code in Java-
land
and use JNI which is a bridge to jump back and forth between
JRE and native code. I went that route and found it confusing and
inelegant, so I decided to take the plunge to a full C++
implementation. This approach works but you will obviously need a
programmer who is very competent in both Java and C++. Additionally
this solution will still be slower than pure C++ because of the bridge
overhead, and the fact that JNI may be inside a critical loop. How
about this: you go this route initially, evaluate performance and
decide whether it is acceptable.
You may also try compiled Java. I have no experience with it, but
logic dictates that it should be much (?) faster.
If I choose an alternative route, say C++/Qt, is there any specific
suggestins regarding open source image libraries that I should look
at?
There are basically 3 GUI toolkits for multi-platform development:
-
http://www.gtk.org
-
http://www.wxwidgets.org
-
http://trolltech.com
The first one didn't give me a warm feeling fuzzy based on the fact
the a *graphical* toolkit didn't even have a decent web page until
now. Perhaps I am being too harsh on the fine folks at GNU, to whom we
all owe so much.
The last one comes with a big caveat, because it is semi commercial
(they were just acquired by Nokia). The free version can only be used
to develop FOSS software!. This is as if anything written in gcc would
have to be open source. This toolkit has been chosen by HP, Google and
Adobe among others.
wxWidgets is by far the one that boasts a larger pool of developers
available, and it is growing like wildfire. You will get plenty of
help here:
http://wxforum.shadonet.com/
They even have a list of talent for hire.
You are quite welcome.
-Ramon