(Oracle Java 1.7, Eclipse Kepler, Ubuntu 12,04 64 бит)Создать DataBufferUShort из ByteBuffer
Мне нужно создать DataBufferUShort из ByteBuffer, но все мои попытки потерпели неудачу во время выполнения ..
Как это делается, por favor?
Вот одна неудача: (java.lang.UnsupportedOperationException)
ShortBuffer sBuf = imageData.asShortBuffer(); // ByteBuffer
DataBufferUShort dataBufferUShort = new DataBufferUShort(sBuf.array(),
nPixels);
Вот трассировки стека. Строка 156 - вторая строка в фрагменте кода выше.
Exception in thread "main" java.lang.UnsupportedOperationException
at java.nio.ShortBuffer.array(ShortBuffer.java:959)
at psw.iu.CreateImage.createGrayscaleImage(CreateImage.java:156)
at psw.iu.TestCreateImage.<init>(TestCreateImage.java:48)
at psw.iu.TestCreateImage.main(TestCreateImage.java:16)
Вот метод, который создает ByteBuffer
public static ByteBuffer createScaledData(WorkingByteBuffer rawWBB,
ByteBuffer scaledByteBuffer) {
rawWBB.byteBuffer.rewind(); // byteBuffer is a ByteBuffer
scaledByteBuffer.rewind();
ShortBuffer inBuf = rawWBB.byteBuffer.asShortBuffer();
ShortBuffer outBuf = scaledByteBuffer.asShortBuffer();
inBuf.rewind();
outBuf.rewind();
int maxDN = MAX_USHORT;
double scaleFactor = (double) maxDN/(double) range;
while (inBuf.hasRemaining()) {
int value = 0xffff & inBuf.get();
int scaledValue = (int) ((double) (value - min) * scaleFactor + 0.5);
if (scaledValue < 0)
scaledValue = 0;
if (scaledValue > maxDN)
scaledValue = maxDN;
outBuf.put((short) scaledValue);
}
return scaledByteBuffer;
}
Редактировать Это не дает никаких ошибок, но это не решение, которое я искал.
imageData.rewind();
ShortBuffer shortBuffer = imageData.asShortBuffer();
shortBuffer.rewind();
DataBufferUShort dataBufferUShort = new DataBufferUShort(nLines * nPixPerLine);
int index = 0;
while(shortBuffer.hasRemaining()){
dataBufferUShort.setElem(index++, 0xffff & shortBuffer.get());
}
Ум, включая репрезентативные примеры кода с ошибкой, который вы пробовали до сих пор? –
@MattBall Неверный пример? –
Нет. Поместите трассировку стека. – EJP