2016-04-03 4 views
-2

バイト配列をPNGイメージ(JPEG以外)に変換するにはどうすればよいですか?私はステガノグラフィをコーディングする際にこれに遭遇しました。私はその間にBufferedImageに変換する必要があるプロセスのビットを知っています。助けてください。バイト配列をpngイメージに変換する

+0

は、あなたのバイトのグレースケールまたはRGB24ていますか? – Nayuki

+0

あなたはどの言語で作業していますか? Javaには、優れたファイルイメージ変換とライティングライブラリがあります。 –

+0

Javaで作業していることを確認できますか?あなたはBufferedImageについて言及しました。そして、あなたは実際にBufferedImageにバイト配列を検索しましたか?結果が得られなかったら私は驚くだろう。 https://stackoverflow.com/questions/12705385/how-to-convert-a-byte-to-a-bufferedimage-in-java – Reti43

答えて

0

長さ=(画像の幅*画像の高さ* 3)のバイト配列があるとします。まず、BufferedImageにデータをパック:

import java.awt.BufferedImage; 
byte[] b = (...); 
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
for (int y = 0; y < height; y++) { 
    for (int x = 0; x < width; x++) { 
     int off = (y * width + x) * 3; 
     int pix = (b[off] & 0xFF) << 16; // Red component 
     pix |= (b[off + 1] & 0xFF) << 8; // Green component 
     pix |= (b[off + 2] & 0xFF) << 0; // Blue component 
     img.setRGB(x, y, pix); 
    } 
} 

そして、我々は、PNGイメージファイルの書き込み:

import javax.imageio.ImageIO; 
ImageIO.write(img, "png", new File("output.png")); 
+0

あなたのコードを試しましたが、停止していません。私が持っているすべての詳細です:私のバイト配列のサイズは1316890と幅= 1024と高さ= 768.私が使用している画像はhttp://vignette3.wikia.nocookie.net/pokemon/images/b/b4/ですPokemon_Anime.png/revision/latest?cb = 20110118234235 –

+0

私のループは正しく終了します。それは停止していないという意味ですか?私にあなたが実行しているコードとあなたが観察している動作についての情報を教えてください – Nayuki

+0

私のコードを少し修正しました。そして、 "ArrayIndexOutOfBound" Exceptionを取得しています。最初の画像のBufferedImageから取得した幅と高さはそれぞれ1024と768で、BufferedImageをバイト配列に変換すると、配列のサイズは1316890です。バイト配列をpng画像に戻したいと思います。あなたのコードを使用する上で私は上記のように例外を取得しています。 –

関連する問題