0

画像ファイルをバイト配列に読み取っています。このバイト配列は、画像ファイルとして sdcard に再度保存する必要があります。ファイルを読み取るには、次のコードを使用しました。

public void readimage()
 {
 InputStream ins_image = getResources().openRawResource(R.drawable.btn_cancel);
 outputStream=new ByteArrayOutputStream();
 try 
 {
   ins_image.available();
 } catch (IOException e)    {   e.printStackTrace();    }
   try 
   {
    Log.e( "Size of image", ""+ins_image.available());
  } catch (IOException e)   {e.printStackTrace();}
   int size = 0;
   byte[] buffer_image = new byte[200000];
   try {
    while((size=ins_image.read(buffer_image,0,200000))>=0)
    {
     outputStream.write(buffer_image,0,size);
    }
    } catch (IOException e) {   e.printStackTrace();    }
    int length_of_image= outputStream.toByteArray().length;
    byte_image=outputStream.toByteArray();
    Log.e("Size of image",""+length_of_image);
      }          

そして、ファイルを保存するための以下のコード:

public void saveimage_fromarray()
{
  File photo=new File(Environment.getExternalStorageDirectory(), "photo.png");
  if (photo.exists()) 
  {
    photo.delete();
  }
  try 
  {
  FileOutputStream fos=new FileOutputStream(photo.getPath());
  fos.write(byte_image[0]);
  fos.close();
  }
   catch (java.io.IOException e) 
 }

ただし、ファイルは保存されていますが、何も表示されません。誰か教えてください。

4

3 に答える 3

1

取得する画像のサイズを 0 の代わりに設定します。

fos.write(byte_image[0]);
于 2013-03-29T13:05:35.540 に答える
0

画像の1バイトだけを書いているようです。

fos.write(byte_image[0]);

ソース ファイル、バイト バッファ、配列、および出力ファイルのサイズを比較してください。

于 2013-03-29T12:59:14.887 に答える
0

すべてを単純化して、このメソッドを呼び出してみませんか:

bmp.compress(Bitmap.CompressFormat.PNG, 100, <pass here a valid file outputstream>);
于 2013-03-29T13:01:53.673 に答える