Halloechen,
ich habe ein Problem damit, folgende Methode "umzudrehen":
Mein grosses Problem an der Stelle ist es, aus dem DataBufferUShort, welches mir das WritableRaster bietet, ein byte[] zu machen.
Folgender Ansatz geht jedenfalls nicht:
Wuerde mich ueber den ein oder anderen Tip freuen.
Achso, hallo erstmal ans Forum, ich bin der Jan.
Gruss, FFNB.
ich habe ein Problem damit, folgende Methode "umzudrehen":
Java:
private BufferedImage getImageFromImageData(byte[] imageData, int imageWidth, int imageHeight)
{
ByteBuffer byteBuffer = ByteBuffer.wrap(imageData);
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
ShortBuffer shortBuffer = byteBuffer.asShortBuffer();
short[] shortImageData = new short[shortBuffer.capacity()];
for(int i=0; i<shortImageData.length; i++)
{
shortImageData[i] = shortBuffer.get(i);
}
ColorModel cm = new DirectColorModel(16, 0xF800, 0x7E0, 0x1F);
DataBufferUShort db = new DataBufferUShort(shortImageData, shortImageData.length);
// hack to workaround an iTunes/iPod bug
// if width or hight not even - add 1
if((imageWidth % 2 != 0) || (imageHeight % 2 != 0))
{
if (imageWidth % 2 != 0) imageWidth = imageWidth+1;
if (imageHeight % 2 != 0) imageHeight = imageHeight+1;
short[] shortImageDataFixed = new short[shortImageData.length+(imageWidth*imageHeight/2)];
System.arraycopy(shortImageData, 0, shortImageDataFixed, 0, shortImageData.length);
db = new DataBufferUShort(shortImageDataFixed, shortImageDataFixed.length);
}
SampleModel sm = cm.createCompatibleSampleModel(imageWidth, imageHeight);
WritableRaster wr = Raster.createWritableRaster(sm, db, null);
BufferedImage bufferedImage = new BufferedImage(cm, wr, false, null);
return bufferedImage;
}
Mein grosses Problem an der Stelle ist es, aus dem DataBufferUShort, welches mir das WritableRaster bietet, ein byte[] zu machen.
Folgender Ansatz geht jedenfalls nicht:
Java:
private byte[] getImageDataFromImage(BufferedImage bufferedImage)
{
byte[] imageData = new byte[]{};
WritableRaster wr = bufferedImage.getRaster();
DataBufferUShort dataBufferUShort = (DataBufferUShort)wr.getDataBuffer();
short[] shortData = dataBufferUShort.getData();
byte[] test = new byte[shortData.length];
for (int i=0; i<shortData.length; i++)
{
test[i] = (byte)shortData[i];
}
ByteBuffer byteBuffer = ByteBuffer.wrap(test);
byteBuffer.order(ByteOrder.BIG_ENDIAN);
imageData = byteBuffer.array();
return imageData;
}
Wuerde mich ueber den ein oder anderen Tip freuen.
Achso, hallo erstmal ans Forum, ich bin der Jan.
Gruss, FFNB.