2012-03-02 72 views
1

CCITT T.6圧縮を追加し、TIFFバイト配列に変換する必要があるjava.awt.Imageがあります。私はTIFFImageWriteParamとjavax.imageioパッケージの他のクラスを使用していくつかの例を見てきましたが、Imageからバイト配列までの完全な例は見つけられません。java.awt.Imageを圧縮付きTIFFバイト配列に変換する

ここまでは、スキャンで取得したjava.awt.Imageから始めています。これは、TIFFのバイト配列を生成するだけで正常に動作しますが、私はバイト配列としてそれを処理する前にTIFFを圧縮するために、TIFFImageWriteParamまたはいくつかの他の手段を用いて、方法を見つける必要があります。

thisImage = ... a java.awt.Image from a scanner 
if(thisImage!=null){ 

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    BufferedImage bimg = new BufferedImage(thisImage.getWidth(null),thisImage.getHeight(null), BufferedImage.TYPE_BYTE_BINARY); 
    bimg.createGraphics().drawImage(thisImage, 0, 0, null); 

    try { 
    ImageIO.write(bimg, "tiff", baos);     
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 

    thisByteArray = baos.toByteArray(); 

    ... 

すべてのヘルプ感謝されます。

答えて

1

私は感謝に解決策を見つけた:this thread.

ここでは、私は私の問題を解決しているやってしまったものです:

thisImage = thisImage = ... a java.awt.Image from a scanner 
if(thisImage!=null){ 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ImageOutputStream ios = ImageIO.createImageOutputStream(baos); 
    boolean foundWriter = false; 
    BufferedImage bimg = new BufferedImage(thisImage.getWidth(null),thisImage.getHeight(null), BufferedImage.TYPE_BYTE_BINARY); 
    bimg.createGraphics().drawImage(thisImage, 0, 0, null); 
    for(Iterator<ImageWriter> writerIter = ImageIO.getImageWritersByFormatName("tif"); writerIter.hasNext() && !foundWriter;) { 
    foundWriter = true; 
    ImageWriter writer = (ImageWriter)writerIter.next(); 
    writer.setOutput(ios); 
    TIFFImageWriteParam writeParam = (TIFFImageWriteParam)writer.getDefaultWriteParam(); 
    writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
    writeParam.setCompressionType("CCITT T.6"); 
    writer.prepareWriteSequence(null); 
    ImageTypeSpecifier spec = ImageTypeSpecifier.createFromRenderedImage(bimg); 
    javax.imageio.metadata.IIOMetadata metadata = writer.getDefaultImageMetadata(spec, writeParam); 
    IIOImage iioImage = new IIOImage(bimg, null, metadata); 
    writer.writeToSequence(iioImage, writeParam); 
    bimg.flush(); 
    writer.endWriteSequence(); 
    ios.flush(); 
    writer.dispose(); 
    ios.close(); 
    thisByteArray = baos.toByteArray(); 
    baos.close(); 
    } 
} 
+0

OMG、それが動作します。ありがとうございました。 :) –

関連する問題