Изображение, загруженное из Android-приложения, кажется поврежденным - PullRequest
1 голос
/ 28 апреля 2011

В моем приложении для Android мне нужно загрузить изображение из папки Assets / Drawable / raw на сервер. Я попробовал следующее:

InputStream fileInputStream;    
if(imageChanged)   {    
   File file = New File("filename");    
   fileInputStream = new FileInputStream(file);   
}else   {    
  fileInputStream = ctx.getAssets().open("default.png");    
}   
int bytesAvailable;    
byte[] buffer = new byte[102400];    
while((bytesAvailable = fileInputStream.available()) > 0) {    
    int bufferSize = Math.min(bytesAvailable, 102400);     
    if(bufferSize<102400){    
         buffer = new byte[bufferSize];    
    }
    int bytesRead = fileInputStream.read(buffer, 0,bufferSize);
    dos.write(buffer, 0, bytesRead);
}

Это выполняется нормально. Я могу прочитать входной поток и записать байты в DataOutputStream, изображение загружено на сервер.

Так или иначе, изображение на сервере кажется поврежденным - только для изображения по умолчанию (загружено в блоке else. Изображение блока if не повреждается)

Я также попытался поместить default.png в папку «raw» и попробовал следующее

fileInputStream = ctx.getResources().openRawResource(R.drawable.default);

Здесь тот же результат - изображение на сервере повреждено.

Я начинаю сомневаться в том, что это потому, что default.png находится в пространстве приложения.

Могу ли я получить некоторую помощь в правильном способе загрузки изображения в область приложения (рисовать / активировать / сырье)?

спасибо!

Ними

1 Ответ

0 голосов
/ 28 апреля 2011

Это может быть связано с размером буфера?Я попробовал два разных метода для чтения / записи png из папки ресурсов, и оба создали рабочий образ.Я использовал FileOutputStream для записи на SD-карту, но это не должно быть проблемой.

InputStream is, is2;
FileOutputStream out = null, out2 = null;
try {
  //method 1: compressing a Bitmap
  is = v.getContext().getAssets().open("yes.png");
  Bitmap bmp = BitmapFactory.decodeStream(is);
  String filename = Environment.getExternalStorageDirectory().toString()+File.separator+"yes.png";
  Log.d("BITMAP", filename);
  out = new FileOutputStream(filename);
  bmp.compress(Bitmap.CompressFormat.PNG, 90, out);

  //method 2: Plain stream IO
  String filename2 = Environment.getExternalStorageDirectory().toString()+File.separator+"yes2.png";
  out2 = new FileOutputStream(filename2);
  Log.d("BITMAP", filename2);
  int r, i=0;
  is2 = v.getContext().getAssets().open("yes.png");
  while ((r = is2.read()) != -1) {
    Log.d ("OUT - byte " + i, "Value: " + r);
    out2.write(r);
    i++;
  }

} catch (IOException e) {
  e.printStackTrace();
} finally {
  try {
    if (out != null)
      out.close();
    if (out2 != null)
      out2.close();
  } catch (IOException e) {
    e.printStackTrace();
  }
}
...