3

nio ShortBuffer のデータからグレースケール イメージを作成する必要があります。ShortBuffer のデータを符号なしバイトにマップする関数がありますが、int です (簡単に変更できます)。私が見つけた方法は、RGB と透明度のカラー モデルを使用しており、非常に効率が悪いようです。TYPE_BYTE_GRAY を適用してコードを変更する方法を確認できませんでした。私はJavaが初めてです。これが私のコードです:

    public void paintComponent(Graphics g) {
    final BufferedImage image;
    int[] iArray = {0, 0, 0, 255};  //  pixel

    image = (BufferedImage) createImage(WIDTH, HEIGHT);

    WritableRaster raster = image.getRaster();
    sBuf.rewind();  // nio ShortBuffer
    for (int row = 0; row < HEIGHT; row++) {
        for (int col = 0; col < WIDTH; col++) {
            int v = stats.mapPix(sBuf.get());  // map short to byte
            iArray[0] = v;  // RGBT
            iArray[1] = v;  
            iArray[2] = v;
            raster.setPixel(col, row, iArray);
        }
    }
    g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}

TIAネイト

4

2 に答える 2

4

1 つのアプローチは、BufferedImage現在行っているようにラスターに書き込むことによって を作成することです。を取得したら、このに示すように、 の方法を使用してBufferedImage変換できます。TYPE_BYTE_GRAYfilter()ColorConvertOp

于 2010-06-24T00:46:48.330 に答える