2011-07-15 5 views
2

イメージとオーディオファイルをバイナリストリームに変換して処理し、Javaの同じバイナリストリームからイメージを再構築したいと考えています。どうやってやるの?誰かがこれに取り組んでいますか?できるだけ早く私を助けてください。ヒントや擬似コードは高く評価されます。 これは私がやろうとした方法ですが、画像を再構成するときに空のファイルを作成するだけです。画像のバイナリへ : -イメージファイルとオーディオファイルをJavaでバイナリに変換する

 File file = new File("E:\\image.jpg"); 
     BufferedImage img = ImageIO.read(file); 

     // write image to byte array in-memory (jpg format) 
     ByteArrayOutputStream b = new ByteArrayOutputStream(); 
     ImageIO.write(img, "jpg", b); 

     byte[] jpgByteArray = b.toByteArray(); 

     // convert it to a String with 0s and 1s 
     StringBuilder sb = new StringBuilder(); 
     for (byte by : jpgByteArray) { 
      sb.append(Integer.toBinaryString(by & 0xFF)); 

画像へのバイナリの場合: -

 byte[] original = obj.orig_seq.getBytes(); 

     InputStream in = new ByteArrayInputStream(original); 
     BufferedImage img = ImageIO.read(in); 

     ImageIO.write(img, "jpg", 
       new File("E:\\mypic_new.jpg")); 

答えて

2

バイナリ列を使用するには、この

StringBuilder sb = new StringBuilder(); 
try (BufferedInputStream is = new BufferedInputStream(new FileInputStream("YourImage.jpg"))) { 
    for (int i; (i = is.read()) != -1;) { 
     String temp = "0000000" + Integer.toBinaryString(i).toUpperCase(); 
     if (temp.length() == 1) { 
      sb.append('0'); 
     } 
     temp = temp.substring(temp.length() - 8); 
     sb.append(temp).append(' '); 
    } 
} 
System.out.print(sb); 

を使用し、ここで、ご希望の出力

であることができます

0000000 11111111 00000111 00011111 00101111 01111111

あなたも進数を使用して、このような単純な文字列(提案)

StringBuilder sb = new StringBuilder(); 
try (BufferedInputStream is = new BufferedInputStream(new FileInputStream("YourFile.txt"))) { 
    for (int i; (i = is.read()) != -1;) { 
     String temp = Integer.toHexString(i).toUpperCase(); 
     if (temp.length() == 1) { 
      sb.append('0'); 
     } 
     sb.append(temp).append(' '); 
    } 
} 
System.out.print(sb); 

にあなたのファイルを変換し、出力はこの

00 FF 07 1F 2F 7F 
ようなものになるだろうことができます