Hi, I am trying to load an image and construct an instance of BufferedImage, unfortunately with no luck so far :( The image displayed shows some dots on the white background, maybe you could help me.
IntBuffer scratch = BufferUtils.createIntBuffer(1);
IL.create();
IL.ilGenImages(scratch);
IL.ilBindImage(scratch.get(0));
IL.ilLoadImage("./test/images/tga32.tga");
ByteBuffer imageData = null;
// get image attributes
int width = IL.ilGetInteger(IL.IL_IMAGE_WIDTH);
int height = IL.ilGetInteger(IL.IL_IMAGE_HEIGHT);
int bpp = IL.ilGetInteger(IL.IL_IMAGE_BPP);
int depth = IL.ilGetInteger(IL.IL_IMAGE_DEPTH);
int bitsPerPixel = IL.ilGetInteger(IL.IL_IMAGE_BITS_PER_PIXEL);
int bytesPerPixel = IL.ilGetInteger(IL.IL_IMAGE_BYTES_PER_PIXEL);
imageData = BufferUtils.createByteBuffer(width
* height * bpp);
IL.ilCopyPixels(0, 0, 0, width, height, 1,
IL.IL_RGBA, IL.IL_BYTE, imageData);
DataBufferSubClass db = new DataBufferSubClass(DataBuffer.TYPE_BYTE,bpp*width*height);
db.setWrBuf(imageData);
ColorModel colorModel = new DirectColorModel(bitsPerPixel, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
SampleModel sampleModel = colorModel.createCompatibleSampleModel(width,height);
WritableRaster writableRaster = new MyWritableRaster(sampleModel, db, new Point(0,0));
BufferedImage bufferedImage = new BufferedImage(colorModel, writableRaster, true, null);
import java.awt.Point;
import java.awt.image.DataBuffer;
import java.awt.image.SampleModel;
import java.awt.image.WritableRaster;
public class MyWritableRaster extends WritableRaster {
public MyWritableRaster(SampleModel sampleModel, DataBuffer dataBuffer,
Point origin) {
super(sampleModel, dataBuffer, origin);
}
}
import java.awt.image.DataBuffer;
import java.nio.ByteBuffer;
public class DataBufferSubClass extends DataBuffer {
private ByteBuffer wrBuf;
public void setWrBuf(ByteBuffer wrBuf) {
this.wrBuf = wrBuf;
}
public DataBufferSubClass(int dataType, int size) {
super(dataType, size);
}
public DataBufferSubClass(int dataType, int size, int numBanks) {
super(dataType, size, numBanks);
}
public DataBufferSubClass(int dataType, int size, int numBanks, int offset) {
super(dataType, size, numBanks, offset);
}
public DataBufferSubClass(int dataType, int size, int numBanks,
int[] offsets) {
super(dataType, size, numBanks, offsets);
}
public int getElem(int bank, int i) {
return wrBuf.get(i);
}
public void setElem(int bank, int i, int val) {
wrBuf.put(i, (byte) val);
}
}
Thanks a lot!