summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/classes/share/com/sun/j3d/utils/image/TextureLoader.java308
1 files changed, 83 insertions, 225 deletions
diff --git a/src/classes/share/com/sun/j3d/utils/image/TextureLoader.java b/src/classes/share/com/sun/j3d/utils/image/TextureLoader.java
index 80ac782..3c28127 100644
--- a/src/classes/share/com/sun/j3d/utils/image/TextureLoader.java
+++ b/src/classes/share/com/sun/j3d/utils/image/TextureLoader.java
@@ -45,26 +45,23 @@
package com.sun.j3d.utils.image;
import javax.media.j3d.*;
-import java.awt.Toolkit;
import java.awt.Image;
import java.awt.Component;
+import java.awt.Transparency;
+import java.awt.color.ColorSpace;
+import java.awt.geom.AffineTransform;
import java.awt.image.*;
+import java.io.File;
+import java.io.IOException;
import java.net.URL;
import java.lang.reflect.Method;
-import java.awt.color.ColorSpace;
-import java.awt.Transparency;
-
-import java.awt.geom.AffineTransform;
-// TODO: remove the following for jdk1.2Beta4
-import java.awt.image.AffineTransformOp;
-// TODO: add the following for jdk1.2Beta4
-//import java.awt.image.AffineTransformOp;
+import javax.imageio.ImageIO;
/**
* This class is used for loading a texture from an Image or BufferedImage.
- * If Java Advanced Imaging is installed then it is used to load the
- * images, otherwise AWT toolkit it used. JAI is capable of loading
- * a larger set of image formats including .tiff and .bmp
+ * The Image I/O API is used to load the images. (If the JAI IIO Tools
+ * package is available, a larger set of formats can be loaded, including
+ * TIFF, JPEG2000, and so on.)
*
* Methods are provided to retrieve the Texture object and the associated
* ImageComponent object or a scaled version of the ImageComponent object.
@@ -72,7 +69,6 @@ import java.awt.image.AffineTransformOp;
* Default format is RGBA. Other legal formats are: RGBA, RGBA4, RGB5_A1,
* RGB, RGB4, RGB5, R3_G3_B2, LUM8_ALPHA8, LUM4_ALPHA4, LUMINANCE and ALPHA
*/
-
public class TextureLoader extends Object {
/**
@@ -90,7 +86,7 @@ public class TextureLoader extends Object {
/**
* Optional flag - specifies that the ImageComponent2D will
- * have a y-orientation of y up, meaning the orgin of the image is the
+ * have a y-orientation of y up, meaning the origin of the image is the
* lower left
*
* @since Java 3D 1.2
@@ -114,19 +110,6 @@ public class TextureLoader extends Object {
private boolean byRef;
private boolean yUp;
- private boolean useJAI = false;
-
- // JAI Methods
- // Use introspection to get the methods so that JAI
- // is not required to compile the Java3D API.
- private Method jaiGetWidth;
- private Method jaiGetHeight;
- private Method jaiGetAsBufferedImage;
- private Method jaiGetRendering;
- private Method jaiCreate;
- private boolean doneJAICheck = false;
- private boolean jaiInstalled = false;
-
/**
* Contructs a TextureLoader object using the specified BufferedImage
* and default format RGBA
@@ -176,7 +159,6 @@ public class TextureLoader extends Object {
}
}
-
/**
* Contructs a TextureLoader object using the specified Image
* and default format RGBA
@@ -218,16 +200,16 @@ public class TextureLoader extends Object {
* @param observer The associated image observer
*/
public TextureLoader(Image image, String format, int flags,
- Component observer) {
+ Component observer) {
if (observer == null) {
- observer = new java.awt.Container();
+ observer = new java.awt.Container();
}
parseFormat(format);
this.flags = flags;
bufferedImage = createBufferedImage(image, observer);
-
+
if ((flags & BY_REFERENCE) != 0) {
byRef = true;
}
@@ -236,7 +218,6 @@ public class TextureLoader extends Object {
}
}
-
/**
* Contructs a TextureLoader object using the specified file
* and default format RGBA
@@ -277,36 +258,33 @@ public class TextureLoader extends Object {
* @param flags The flags specify what options to use in texture loading (generate mipmap etc)
* @param observer The associated image observer
*/
- public TextureLoader(String fname, String format, int flags,
- Component observer) {
+ public TextureLoader(final String fname, String format, int flags,
+ Component observer) {
- if (observer == null) {
- observer = new java.awt.Container();
- }
-
- final Toolkit toolkit = Toolkit.getDefaultToolkit();
- final Image image[] = new Image[1];
- final String fn = fname;
-
- java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction() {
- public Object run() {
- image[0] = toolkit.createImage(fn);
- return null;
- }
- }
- );
- parseFormat(format);
- this.flags = flags;
- bufferedImage = createBufferedImage(image[0], observer);
-
- if (bufferedImage==null && JAIInstalled() ) {
- parseFormat(format);
- bufferedImage = JAIgetImage( fname, observer );
- }
+ if (observer == null) {
+ observer = new java.awt.Container();
+ }
- if (bufferedImage==null)
- System.err.println("Error loading Image "+fname );
+ bufferedImage = (BufferedImage)
+ java.security.AccessController.doPrivileged(
+ new java.security.PrivilegedAction() {
+ public Object run() {
+ try {
+ return ImageIO.read(new File(fname));
+ } catch (IOException e) {
+ System.err.println(e);
+ return null;
+ }
+ }
+ }
+ );
+
+ parseFormat(format);
+ this.flags = flags;
+
+ if (bufferedImage==null) {
+ System.err.println("Error loading Image "+fname );
+ }
if ((flags & BY_REFERENCE) != 0) {
byRef = true;
@@ -317,129 +295,6 @@ public class TextureLoader extends Object {
}
/**
- * Load the image using the JAI API
- */
- private BufferedImage JAIgetImage( String filename, Component observer ) {
- final String fn = filename;
- BufferedImage bImage = null;
-
- try {
- Object source = java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction() {
- public Object run() {
- try {
- Object renderedOp;
- renderedOp = jaiCreate.invoke( null, new Object[] { "fileload", fn } );
- // Force JAI to actually load the image
- // within this privileged action
- jaiGetRendering.invoke( renderedOp, new Object[] {} );
-
- return renderedOp;
- } catch( Exception e ) {
- e.printStackTrace();
- return null;
- }
- }
- }
- );
-
- int width = ((Integer)jaiGetWidth.invoke( source, new Object[] {} )).intValue();
- int height = ((Integer)jaiGetHeight.invoke( source, new Object[] {} )).intValue();
-
-
- WritableRaster wr = java.awt.image.Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, width, height , width * 4, 4, bandOffset, null);;
- bImage = new BufferedImage(colorModel, wr, false, null);
-
- java.awt.Graphics g = bImage.getGraphics();
- BufferedImage im = (BufferedImage)jaiGetAsBufferedImage.invoke( source, new Object[] {} );
- g.drawImage(im, 0, 0, observer );
- } catch( Exception e ) {
- return null;
- //System.out.println("Unable to load Texture "+filename);
- }
-
-
- return bImage;
- }
-
- /**
- * Load the image using the JAI API
- */
- private BufferedImage JAIgetImage( URL url, Component observer ) {
- final URL local_url = url;
- BufferedImage bImage=null;
- try {
- Object source = java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction() {
- public Object run() {
- try {
- Object renderedOp;
- renderedOp = jaiCreate.invoke( null, new Object[] { "URL", local_url } );
- // Force JAI to actually load the image
- // within this privileged action
- jaiGetRendering.invoke( renderedOp, new Object[] {} );
-
- return renderedOp;
- } catch( Exception e ) {
- e.printStackTrace();
- return null;
- }
- }
- }
- );
-
-
- int width = ((Integer)jaiGetWidth.invoke( source, new Object[] {} )).intValue();
- int height = ((Integer)jaiGetHeight.invoke( source, new Object[] {} )).intValue();
-
-
- WritableRaster wr = java.awt.image.Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, width, height , width * 4, 4, bandOffset, null);;
- bImage = new BufferedImage(colorModel, wr, false, null);
-
- java.awt.Graphics g = bImage.getGraphics();
- BufferedImage im = (BufferedImage)jaiGetAsBufferedImage.invoke( source, new Object[] {} );
- g.drawImage(im, 0, 0, observer );
- } catch( Exception e ) {
- return null;
- //System.out.println("Unable to load Texture "+local_url.toString());
- }
-
- return bImage;
- }
-
- /**
- * Check if JAI is installed
- * If it is installed created Methods for each method we need
- * to call
- */
- private boolean JAIInstalled() {
- if (!doneJAICheck) {
- try {
- Class cl = Class.forName("javax.media.jai.PlanarImage");
- jaiGetWidth = cl.getDeclaredMethod( "getWidth", new Class[] {} );
- jaiGetHeight = cl.getDeclaredMethod( "getHeight", new Class[] {} );
- jaiGetAsBufferedImage = cl.getDeclaredMethod( "getAsBufferedImage", new Class[] {} );
- Class cl2 = Class.forName("javax.media.jai.JAI");
- jaiCreate = cl2.getDeclaredMethod( "create", new Class[] { String.class, Object.class } );
- Class cl3 = Class.forName("javax.media.jai.RenderedOp");
- jaiGetRendering = cl3.getDeclaredMethod("getRendering", new Class[] {} );
-
- jaiInstalled = true;
- } catch( ClassNotFoundException e ) {
- jaiInstalled = false;
- } catch( NoSuchMethodException ex ) {
- ex.printStackTrace();
- jaiInstalled = false;
- }
-
- doneJAICheck = true;
- }
-
- return jaiInstalled;
- }
-
-
- /**
* Contructs a TextureLoader object using the specified URL
* and default format RGBA
* @param url The URL that specifies an Image to load the texture with
@@ -478,35 +333,33 @@ public class TextureLoader extends Object {
* @param flags The flags specify what options to use in texture loading (generate mipmap etc)
* @param observer The associated image observer
*/
- public TextureLoader(URL url, String format, int flags,
- Component observer) {
-
- if (observer == null) {
- observer = new java.awt.Container();
- }
+ public TextureLoader(final URL url, String format, int flags,
+ Component observer) {
- final Toolkit toolkit = Toolkit.getDefaultToolkit();
- final Image image[] = new Image[1];
- final URL Url = url;
-
- java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction() {
- public Object run() {
- image[0] = toolkit.getImage(Url);
- return null;
- }
- }
- );
- parseFormat(format);
- this.flags = flags;
- bufferedImage = createBufferedImage(image[0], observer);
-
- if (bufferedImage==null && JAIInstalled() ) {
- bufferedImage = JAIgetImage( url, observer );
- }
+ if (observer == null) {
+ observer = new java.awt.Container();
+ }
- if (bufferedImage==null)
- System.err.println("Error loading Image "+url.toString() );
+ bufferedImage = (BufferedImage)
+ java.security.AccessController.doPrivileged(
+ new java.security.PrivilegedAction() {
+ public Object run() {
+ try {
+ return ImageIO.read(url);
+ } catch (IOException e) {
+ System.err.println(e);
+ return null;
+ }
+ }
+ }
+ );
+
+ parseFormat(format);
+ this.flags = flags;
+
+ if (bufferedImage==null) {
+ System.err.println("Error loading Image "+url.toString() );
+ }
if ((flags & BY_REFERENCE) != 0) {
byRef = true;
@@ -523,7 +376,6 @@ public class TextureLoader extends Object {
* @return The associated ImageComponent2D object
*/
public ImageComponent2D getImage() {
-
if (imageComponent == null)
imageComponent = new ImageComponent2D(imageComponentFormat,
bufferedImage, byRef, yUp);
@@ -539,7 +391,6 @@ public class TextureLoader extends Object {
* @return The scaled ImageComponent2D object
*/
public ImageComponent2D getScaledImage(float xScale, float yScale) {
-
if (xScale == 1.0f && yScale == 1.0f)
return getImage();
else
@@ -576,10 +427,9 @@ public class TextureLoader extends Object {
* @return The associated Texture object
*/
public Texture getTexture() {
-
ImageComponent2D[] scaledImageComponents = null;
BufferedImage[] scaledBufferedImages = null;
- if (tex == null) {
+ if (tex == null) {
if (bufferedImage==null) return null;
int width = getClosestPowerOf2(bufferedImage.getWidth());
@@ -631,7 +481,8 @@ public class TextureLoader extends Object {
}
// create a BufferedImage from an Image object
- private BufferedImage createBufferedImage(Image image, Component observer) {
+ private BufferedImage createBufferedImage(Image image,
+ Component observer) {
int status;
@@ -651,7 +502,11 @@ public class TextureLoader extends Object {
int width = image.getWidth(observer);
int height = image.getHeight(observer);
- WritableRaster wr = java.awt.image.Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, width, height , width * 4, 4, bandOffset, null);;
+ WritableRaster wr =
+ java.awt.image.Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
+ width, height,
+ width * 4, 4,
+ bandOffset, null);
BufferedImage bImage = new BufferedImage(colorModel, wr, false, null);
java.awt.Graphics g = bImage.getGraphics();
@@ -709,8 +564,8 @@ public class TextureLoader extends Object {
}
// return a scaled image of given width and height
- private BufferedImage getScaledImage(BufferedImage origImage, int width,
- int height){
+ private BufferedImage getScaledImage(BufferedImage origImage,
+ int width, int height) {
int origW = origImage.getWidth();
int origH = origImage.getHeight();
@@ -721,18 +576,22 @@ public class TextureLoader extends Object {
}
// return a scaled image of given x and y scale
- private BufferedImage getScaledImage(BufferedImage origImage, float xScale,
- float yScale){
-
+ private BufferedImage getScaledImage(BufferedImage origImage,
+ float xScale, float yScale) {
+
// If the image is already the requested size, no need to scale
if (xScale == 1.0f && yScale == 1.0f)
return origImage;
else {
-
int scaleW = (int)(origImage.getWidth() * xScale + 0.5);
int scaleH = (int)(origImage.getHeight() * yScale + 0.5);
- WritableRaster wr = java.awt.image.Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, scaleW, scaleH , scaleW * 4, 4, bandOffset, null);;
- BufferedImage scaledImage = new BufferedImage(colorModel, wr, false, null);
+ WritableRaster wr =
+ java.awt.image.Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
+ scaleW, scaleH,
+ scaleW * 4, 4,
+ bandOffset, null);
+ BufferedImage scaledImage = new BufferedImage(colorModel, wr,
+ false, null);
java.awt.Graphics2D g2 = scaledImage.createGraphics();
AffineTransform at = AffineTransform.getScaleInstance(xScale,
@@ -744,7 +603,6 @@ public class TextureLoader extends Object {
}
}
-
private int computeLog(int value) {
int i = 0;