2

BufferedImageを使用してファイルからTIFF画像を読み取ろうとしています。以下は私のコードです:

String filename = "/image/parrot.tiff";
File f = new File (filename);
try{
        BufferedImage img = ImageIO.read(f);
}catch (Exception e){
        System.out.println("Something went wrong!");
}

しかし、それは機能していません。ファイルが正しく読み取られたかどうかをテストするためだけに、testInputというメソッドがあります。

public void testInput(){
    System.out.println(f.exists());
    System.out.println(f.canRead());
    System.out.println(f.canWrite());
}*/

それらの3つは常に「false」を返し、上記のコードは常に「何かがうまくいかなかった!」を返します。プラグインにJAIImageIOを追加して、TIFF画像を読み取りました。何が問題だと思われるか考えてみてください。

4

3 に答える 3

5

実際にJAIの準備ができていることを確認する必要があります。JAIはImageIOのプラグイン拡張機能であり、そこにない場合はTIFFをデコードできません。簡単な単体テストは次のとおりです。

@Test
public void canGetTiffDecoder()
{
    Iterator<ImageReader> reader = ImageIO.getImageReadersByFormatName("TIFF");
    assertNotNull(reader);
    assertTrue("No tiff decoder", reader.hasNext());
}
于 2012-01-10T16:40:46.307 に答える
2

ばかげているように見えるかもしれませんが、ファイルが配置されていることを確認してください

/image/parrot.tiff

Javadocによると、exists()は以下を返します。

この抽象パス名で示されるファイルまたはディレクトリが存在する場合にのみtrue。それ以外の場合はfalse

ですから、道は間違っているのではないかと思います。あなたのコメントによると、正しい道は

src/image/parrot.tiff

そうでない場合は、試してください

src/image/parrot.tiff

すべての場合において、Java(および他のほとんどの言語)でファイルパスがどのように管理されているかをよりよく理解する必要があります;-)

于 2012-01-02T10:26:59.957 に答える
1

また、使用するtifの形式も重要です。JAIプラグインを使用しても、一部の形式のtiffのみがサポートされます。たとえば、bluemarble.tifイメージをダウンロードしたとき、内部の仕組みの奥深くで次のようになりました。

原因:java.lang.RuntimeException:平面(バンドシーケンシャル)形式のTIFFはサポートされていません。

そのため、特定のtifファイル形式は、専用ライブラリの助けがなければサポートされません。それらのライブラリの1つはGDALです。 http://gdal.org/java/ ただし、サポートライブラリの多くはネイティブコードを必要とし、移植可能な純粋なJavaコンテキストでは機能しない場合があります。

于 2012-07-13T15:14:44.913 に答える