Input
- DDS/PSD/TGA input support
Create from a TGA file
import java.io.FileInputStream;
import java.io.IOException;
import net.npe.image.PixelFormat;
import net.npe.image.PixelImage;
import net.npe.image.util.ImageReader;
import net.npe.image.util.ImageType;
public class Test {
public static void main(String [] args) {
try {
FileInputStream fis = new FileInputStream("test.tga");
byte [] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
PixelImage image = ImageReader.read(ImageType.TGA, PixelFormat.ARGB, buffer, 0);
}
catch(IOException e) {
e.printStackTrace();
}
}
}
BufferedImage with ImageIO
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import net.npe.image.PixelFormat;
import net.npe.image.PixelImage;
import net.npe.image.util.ImageReader;
import net.npe.image.util.ImageType;
public class Test {
public static void main(String [] args) {
try {
BufferedImage bufferedImage = ImageIO.read(new File("test.png"));
int width = bufferedImage.getWidth();
int height = bufferedImage.getHeight();
int [] pixels = bufferedImage.getRGB(0, 0, width, height, null, 0, width);
PixelImage image = new PixelImage(pixels, width, height, PixelFormat.ARGB);
}
catch(IOException e) {
e.printStackTrace();
}
}
}
OpenGL Texture (JOGL)
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.IntBuffer;
import net.npe.image.PixelFormat;
import net.npe.image.PixelImage;
import net.npe.image.util.ImageReader;
import net.npe.image.util.ImageType;
try {
FileInputStream fis = new FileInputStream("test.tga");
byte [] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
PixelImage image = ImageReader.read(ImageType.TGA, PixelFormat.ABGR, buffer, 0);
int [] pixels = image.getPixels();
int width = image.getWidth();
int height = image.getHeight();
gl.glEnable(GL_TEXTURE_2D);
gl.glBindTexture(GL_TEXTURE_2D, texture);
gl.glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
IntBuffer buffer = IntBuffer.wrap(pixels);
gl.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
catch(IOException e) {
e.printStackTrace();
}
Android Bitmap
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
private Bitmap createTGABitmap(String path) {
Bitmap bitmap = null;
try {
InputStream is = getAssets().open(path);
byte [] buffer = new byte[is.available()];
is.read(buffer);
is.close();
PixelImage image = ImageReader.read(ImageType.TGA, PixelForamt.ARGB, buffer, 0);
int [] pixels = image.getPixels();
int width = image.getWidth();
int height = image.getHeight();
bitmap = Bitmap.createBitmap(pixels, 0, width, width, height, Config.ARGB_8888);
}
catch(Exception e) {
e.printStackTrace();
}
return bitmap;
}
Android OpenGL Texture
import javax.microedition.khronos.opengles.GL10;
import static javax.microedition.khronos.opengles.GL10.*;
public int createTGATexture(GL10 gl, String path) {
int texture = 0;
try {
InputStream is = getContext().getAssets().open(path);
byte [] buffer = new byte[is.available()];
is.read(buffer);
is.close();
PixelImage image = ImageReader.read(ImageType.TGA, PixelForamt.ABGR, buffer, 0);
int [] pixels = image.getPixels();
int width = image.getWidth();
int height = image.getHeight();
int [] textures = new int[1];
gl.glGenTextures(1, textures, 0);
gl.glEnable(GL_TEXTURE_2D);
gl.glBindTexture(GL_TEXTURE_2D, textures[0]);
gl.glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
IntBuffer texBuffer = IntBuffer.wrap(pixels);
gl.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texBuffer);
gl.glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
gl.glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
gl.glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gl.glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
texture = textures[0];
}
catch (IOException e) {
e.printStackTrace();
}
return texture;
}
GWT HTML5 Canvas
import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.canvas.dom.client.CanvasPixelArray;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.ImageData;
import com.google.gwt.typedarrays.client.Uint8ArrayNative;
import com.google.gwt.typedarrays.shared.ArrayBuffer;
import com.google.gwt.xhr.client.ReadyStateChangeHandler;
import com.google.gwt.xhr.client.XMLHttpRequest;
import com.google.gwt.xhr.client.XMLHttpRequest.ResponseType;
private void addTGACanvas(String url) {
XMLHttpRequest request = XMLHttpRequest.create();
request.open("GET", url);
request.setResponseType(ResponseType.ArrayBuffer);
request.setOnReadyStateChange(new ReadyStateChangeHandler() {
@Override
public void onReadyStateChange(XMLHttpRequest xhr) {
if(xhr.getReadyState() == XMLHttpRequest.DONE) {
if(xhr.getStatus() >= 400) {
// error
System.out.println("Error");
}
else {
try {
ArrayBuffer arrayBuffer = xhr.getResponseArrayBuffer();
Uint8ArrayNative u8array = Uint8ArrayNative.create(arrayBuffer);
byte [] buffer = new byte[u8array.length()];
for(int i=0; i<buffer.length; i++) {
buffer[i] = (byte)u8array.get(i);
}
PixelImage image = new ImageReader.read(ImageType.TGA, PixelFormat.ABGR, buffer, 0);
Canvas canvas = createImageCanvas(image);
panel.add(canvas);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
});
request.send();
}
private Canvas createImageCanvas(PixelImage image) {
int [] pixels = image.getPixels();
int width = image.getWidth();
int height = image.getHeight();
Canvas canvas = Canvas.createIfSupported();
canvas.setCoordinateSpaceWidth(width);
canvas.setCoordinateSpaceHeight(height);
Context2d context = canvas.getContext2d();
ImageData data = context.createImageData(width, height);
CanvasPixelArray array = data.getData();
for(int i=0; i<width*height; i++) { // ABGR
array.set(4*i+0, pixels[i] & 0xFF);
array.set(4*i+1, (pixels[i] >> 8) & 0xFF);
array.set(4*i+2, (pixels[i] >> 16) & 0xFF);
array.set(4*i+3, (pixels[i] >> 24) & 0xFF);
}
context.putImageData(data, 0, 0);
return canvas;
}
GWT WebGL Texture (GwtGL)
import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.canvas.dom.client.CanvasPixelArray;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.ImageData;
import com.google.gwt.typedarrays.client.Uint8ArrayNative;
import com.google.gwt.typedarrays.shared.ArrayBuffer;
import com.google.gwt.xhr.client.ReadyStateChangeHandler;
import com.google.gwt.xhr.client.XMLHttpRequest;
import com.google.gwt.xhr.client.XMLHttpRequest.ResponseType;
import com.googlecode.gwtgl.binding.WebGLRenderingContext;
import com.googlecode.gwtgl.binding.WebGLTexture;
import static com.googlecode.gwtgl.binding.WebGLRenderingContext.*;
private void addTGACanvas(String url) {
XMLHttpRequest request = XMLHttpRequest.create();
request.open("GET", url);
request.setResponseType(ResponseType.ArrayBuffer);
request.setOnReadyStateChange(new ReadyStateChangeHandler() {
@Override
public void onReadyStateChange(XMLHttpRequest xhr) {
if(xhr.getReadyState() == XMLHttpRequest.DONE) {
if(xhr.getStatus() >= 400) {
// error
System.out.println("Error");
}
else {
try {
ArrayBuffer arrayBuffer = xhr.getResponseArrayBuffer();
Uint8ArrayNative u8array = Uint8ArrayNative.create(arrayBuffer);
byte [] buffer = new byte[u8array.length()];
for(int i=0; i<buffer.length; i++) {
buffer[i] = (byte)u8array.get(i);
}
PixelImage image = ImageReader.read(ImageType.TGA, PixelFormat.ABGR, buffer, 0);
Canvas canvas = createImageCanvas(image);
WebGLTexture texture = gl.createTexture();
gl.enable(TEXTURE_2D);
gl.bindTexture(TEXTURE_2D, texture);
gl.texImage2D(TEXTURE_2D, 0, RGBA, RGBA, UNSIGNED_BYTE, canvas.getElement());
gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);
gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);
gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, LINEAR);
gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, LINEAR);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
});
request.send();
}
private WebGLRenderingContext gl;