バイト配列を画像ファイルに変換したい。これは私のコードの一部です
BufferedImage image = user_space(getImage(image_path(path,name,"jpg")));
System.out.println("Image:"+image);
//Image : BufferedImage@12d263f: type = 5 ColorModel: #pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@12a0f6c transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 466 height = 336 #numData Elements 3 dataOff[0] = 2
decode = decode_text(get_byte_data(image));
try {
System.out.println("length :"+decode.length);
//length :- 73
BufferedImage bImageFromConvert = ImageIO.read(new ByteArrayInputStream(decode));
System.out.println(bImageFromConvert);
ImageIO.write(bImageFromConvert, "jpg", new File(
"D:/eeraj/new-darksouls.jpg"));
}
private byte[] get_byte_data(BufferedImage image)
{
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte)raster.getDataBuffer();
return buffer.getData();
}
private byte[] decode_text(byte[] image)
{
int length = 0;
int offset = 24;
//loop through 32 bytes of data to determine text length
for(int i=24; i<32; ++i) //i=24 will also work, as only the 4th byte contains real data
{
length = (length << 1) | (image[i] & 1);
}
byte[] result = new byte[length];
//loop through each byte of text
for(int b=0; b<result.length; ++b )
{
//loop through each bit within a byte of text
for(int i=0; i<8; ++i, ++offset)
{
//assign bit: [(new byte value) << 1] OR [(text byte) AND 1]
result[b] = (byte)((result[b] << 1) | (image[offset] & 1));
}
}
return result;
}
エラーが発生します
java.lang.IllegalArgumentException: im == null!
at javax.imageio.ImageIO.write(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
ImageIO.read メソッドが null を返しています。その結果、後でイメージを書き込もうとすると例外が発生します。
この問題の解決策を見つけるために Google で検索しましたが、画像ヘッダー情報を変更する以外に具体的なものは何も見つかりませんでした。
この問題を解決するにはどうすればよいか教えてください。