私は Java Advanced Imaging にまったく慣れていません。私が到達した最初の障害は、12 ビット、シングル バンド、グレースケール JPEG ファイルを読み取る機能です。JAIでそれが可能であるという言及を見たことがありますが、それをどのように行うべきかについてのコードや提案さえありません。誰かが役立つリンクまたは短いコードスニペットで私を助けてくれませんか?
これまでこのチュートリアルを使用してきましたが、この問題については役に立ちませんでした。
ありがとう。
私は Java Advanced Imaging にまったく慣れていません。私が到達した最初の障害は、12 ビット、シングル バンド、グレースケール JPEG ファイルを読み取る機能です。JAIでそれが可能であるという言及を見たことがありますが、それをどのように行うべきかについてのコードや提案さえありません。誰かが役立つリンクまたは短いコードスニペットで私を助けてくれませんか?
これまでこのチュートリアルを使用してきましたが、この問題については役に立ちませんでした。
ありがとう。
JAI-ImageIO はそれ自体を Java の ImageIO API に登録するため、クラスパスに jai-imageio jar を配置し、ImageIO.read(file) などの通常の ImageIO メソッドを呼び出すだけで使用できるはずです。
jpeg の問題は、Java の IIORegistry にデフォルトの jpeg リーダーがあり、ImageIO.getImageReadersForFormatName() などを使用して手動で正しいものを選択する必要がある場合があります。
より難解な形式のもう 1 つの点は、JAI ImageIO には通常 2 つの実装があることです。1 つは純粋な Java で、もう 1 つはネイティブ バイナリ ライブラリを使用します。 LD_LibRARY_PATH または、プログラムの作業ディレクトリに配置します。ネイティブ実装は通常、純粋な Java のものよりもモード形式のバリアントをサポートします。
通常、JAI + JAI Image I/O を使用して JPEG 12 ビット グレースケール イメージを読み取ります。
以前の回答に加えて、JPEG 12 ビットを読み取るにはネイティブ バイナリ ライブラリが必要なので、mediaLib ライブラリが必要です。
Image I/O からの「ImageRead」操作のみが必要です。
byte[] imageBytes = ...
RenderedOp readImage = JAI.create("ImageRead", new MemoryImageInputStream(imageBytes));
通常は FTP から画像ファイルを読み込むので、 を取得し、をサブクラス化してを にラップするbyte[]
カスタムが必要です。MemoryImageInputStream
byte[]
ImageInputStream
ImageInputStreamImpl