2016-12-20 7 views
1

BufferedImageのRasterについて質問があります。私は画像データのバイト配列を持っており、そのバイトデータを新しい画像データとして設定したい。私はすでに、道道のこれをやって見て下図ました:バイト配列でラスタデータを設定する

BufferedImage bImageFromConvert = new BufferedImage(dimWidth, dimHeight, BufferedImage.TYPE_BYTE_GRAY); 
    byte[] bufferHolder = ((DataBufferByte) bImageFromConvert.getRaster().getDataBuffer()).getData(); 
    System.arraycopy(imageInByte, 0, bufferHolder, 0, bufferHolder.length);//imageInByte is my byte array 
    ImageIO.write(bImageFromConvert, "bmp", new File(
       directory + fileName + "_Compressed.bmp")); 

しかし、BMPへのデータの書き込み中に、最終的な結果が予想されたものではありません。私は数日間このプロジェクトで頭を悩ましていました。バイトデータを直接Rasterに入れて、違いがあるかどうか確認したいのです。この質問がちょっと混乱していたらごめんなさい、私の脳はコーディングの時間から少し揚げられています。私がそれをもっと明確にする方法があれば教えてください。

ありがとうございました!

EDIT:出力画像 clilck

EDIT2:サイドノートバイトは、出力画像におけるそのように繰り返しているように見える理由は、誰もが知っているのですか?上位ビットと下位ビットを分離するコードは、何も複製していないようです。

+0

あなたが期待していた結果ではないものは何ですか? – CraigR8806

+0

バイト配列 'imageInByte'を' bImageFromConvert'に適用しようとしていますか? – CraigR8806

+0

@ CraigR8806私は、画像に積み重なった画像のバイトデータを書き込んでいます。意図した結果は、画像の上端に本当に "明るい"ミニ画像として表示され、下端の下位バイトはより暗いミニ画像。今は、上位バイトと下位バイトイメージが2回繰り返されているように見えます。複数のカラーチャンネルが原因だと思いますか?しかし、私はTYPE_BYTE_GRAYが私に符号なし8ビットのグレースケール画像を与えたと確信していました。なぜこの繰り返しが起こっているのか私は非常に混乱しています。私は自分のイメージ出力を添付して、私が何を意味するかを見ることができます。 – Sarah

答えて

1

DataBufferByteを使用してバイト配列をイメージにコピーする方法は、これを実行するための最速かつ安全な方法です。私はまったく同じことをして、それは完全に動作します。結果は、あなたが期待するものでない場合

は結果的に、そして2つだけの可能性があります。あなたがたDataBufferにコピー

  1. データは、あなたが事、彼らは
  2. 問題がある何であるかではありませんあなたはイメージを書く。

DataBufferの代わりにラスタを使用する場合は、次のようにします。

for (int y=0, pos=0 ; y < dimHeight ; y++) 
    for (int x=0 ; x < dimWidth ; x++) 
     bImageFromConvert.getRaster().setSample(x, y, O, imageInByte[pos] & 0xFF) ; 

しかし、前と同じ結果である必要があります。 Rasterは、BufferedImageエンコーディングを管理します。だから私はあなたが他のところで問題を抱えていると思います(私が引用した2つの点を参照)。

関連する問題