0

(Oracle Java 1.7、Eclipse ケプラー、Ubuntu 12.04 64 ビット)

ByteBufferからDataBufferUShortを作成する必要がありますが、実行時にすべての試行が失敗しました..

これはどのように行われます?

ここに 1 つの失敗があります: ( java.lang.UnsupportedOperationException )

        ShortBuffer sBuf = imageData.asShortBuffer(); // ByteBuffer
    DataBufferUShort dataBufferUShort = new DataBufferUShort(sBuf.array(),
            nPixels);

これがスタックトレースです。156 行目は、上記のコード スニペットの 2 行目です。

 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());
    }
4

2 に答える 2