I recently moved to Java for my job, and I had to write a component that would perform various graphics operations such as stretching/rotating/blending a bitmap. I use a proprietary interface, that features a component similar to the AWT Image component, so I can directly access the pixel datas from the bitmap (in ARGB format).
My problem is that when I ported some code I''ve written before in VB, C and Asm, I had a *much* slower result, something easily like 20 times slower. I know that Java being (in my case) just interpreted code, it might be slower than other languages, but still, I''ve seen some amazing demos in Javas (such as Lucid Dream) running at a decent speed (with 3D, alpha-blending, and some other cool FXs)
Maybe accessing the pixels directly isn''t the way to go, but I can''t think of anything better; What else could I try to optimize my code ? I''m supposed to work in true-color mode (no 16-bits color model), have to stick with Java 1.1, can''t use native-code compilation, and don''t know what other primitive type to use to hold a 8 bits value instead of int (does the use of short really increases speed ?).
Please help !!!
I think using shorts is slower than ints. Why not use the pure java code to work with the pixel data. The other component might be slowing everything down. You might try using jdk1.3 also. If you need 1.1 for compatibility you might have to tell your boss that you just can't achieve the expected speeds. The only thing that will break if you use 1.3 stuff are macs and i don't have any luck with macs using 1.1 anyways.
Using AWT for graphics manipulation is a bad idea. The 2D API and Advanced Imaging API were specfically desinged for 2D image manipulation.
java 2D api http://java.sun.com/products/java-media/2D/index.html
java advanced imaging api http://java.sun.com/products/java-media/jai/index.html
If it''s going to be running a web browser then you don''t have to worry to much because if the user doesn''t have the Java 2 plug-in it prompts them to download it like the Macromedia Flash plug-in. I believe IE/Netscape prompt them I dont know about other browser.
Depending on your platform, the Java2D api is also optimized and will take advantage of graphics hardware. On Windows machines, Java2D is actually pretty fast, and has many of the types of filters you might want to use.
Chances are you can get any three of these things, but all four is a touch unrealistic. If you have to code to a spec, try and see what can be relaxed. Looks like concensus is try and relax the Java1.1 support and use the plugin or distribute a 1.2 JRE. Changing from an int to a short probably won''t buy you much, especially since performance of each depends on the VM implementation, and many may have just stuffed shorts into the int impl.