1

カラー インデックス付きの TIFF 画像 (8 ビット) があり、それを RGB 24 ビット画像 (インデックスなし) に変換したいと考えています。それを行う方法は何ですか?

私はJMagickを使用しています。奇妙なことに、次を使用すると、グレースケールのインデックス付き 8 ビット画像で問題なく動作します。

image.transformRgbImage(info.getColorspace());

画像はインデックス化されていませんが、その後も 8 ビットのままである場合でも、グレースケールであり、実際には 8 ビットである必要があるため、これは幸運なことです。奇妙なことは、transformRgbImage() がそれを実行することですが、イメージを 24 ビットのものに変換することを期待しています。ともかく...

同じ方法は、カラー インデックス付きの 8 ビット イメージでは機能しません。その目標を達成するために JMagick API を使用する方法がわかりません。設定してみました:

image.setDepth(24);

また:

info.setDepth(24);

ただし、どちらも EXCEPTION_ACCESS_VIOLATION になります。私が設定したとき:

info.setDepth(32);

例外は発生しません。1) ただし、画像は 32 ビットであってはなりませんが、2) すべて黒 (1 つの一意の色) です。setDepth(24) でこのような例外が発生するのはなぜですか?? どうすればいいですか?

よろしくお願いします。

4

1 に答える 1

2

jmagickについては知りませんが、通常、画像オブジェクトを作成すると、そのプロパティは固定されます(サイズとカラーモ​​デル)。

画像のプロパティを変更するのではなく、必要なターゲット プロパティで新しい画像を作成し、元の画像を新しい画像にペイントします。プレーンコア Java では、次のように簡単に実行できます。

public BufferedImage toRGB(Image i) {
    BufferedImage rgb = new BufferedImage(i.getWidth(null), i.getHeight(null), BufferedImage.TYPE_INT_RGB);
    rgb.createGraphics().drawImage(i, 0, 0, null);
    return rgb;
}
于 2013-10-25T16:26:12.703 に答える