2015-10-06 2 views
0

Я пытаюсь загрузить изображение асинхронно с url, а затем преобразовать его в растровое изображение, я могу загрузить изображение асинхронно без каких-либо ошибок, но мне сложно преобразовать его в растровое изображение ,
Конвертировать изображение, загруженное в растровое изображение

вот мой код

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

      // This is my image link 
      String url="www.myimagelink.com"; 

      // This downloads the image from the servers 
      new DownloadImage(ImageView).execute(url); 

      //this is suppose to convert my bitmap into a byteArray, but I cant seem to convert my image downloaded to a bitmap 

      final byte[] byteArray; 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
      byteArray = stream.toByteArray(); 

     } 



    private class DownloadImage extends AsyncTask<String, Void, Bitmap> { 
     ImageView bmImage; 

     public DownloadImage(ImageView bmImage) { 
      this.bmImage = bmImage; 
     } 

     protected Bitmap doInBackground(String... urls) { 
      String urldisplay = urls[0]; 
      Bitmap mIcon11 = null; 
      try { 
       InputStream in = new java.net.URL(urldisplay).openStream(); 
       mIcon11 = BitmapFactory.decodeStream(in); 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return mIcon11; 
     } 

     protected void onPostExecute(Bitmap result) { 
      bmImage.setImageBitmap(result); 

     } 
    } 

} 

Пожалуйста, как я могу преобразовать мое изображение downlaoded в растровое изображение? Благодаря

+0

*, но мне трудно преобразовать его в растровое изображение. * Не могли бы вы немного разобраться? – Blackbelt

+0

Ваша попытка преобразования bitmap в byteArray должна произойти в onPostExecute, а не в onCreate, поскольку asynctask не является блокирующим вызовом, и это произойдет асинхронно ... –

+0

«Пожалуйста, как я могу преобразовать изображение в downmode?». Вы уже делаете это в doInBackground. И вы позволяете doInBackgroud возвращать тот Bitmap, который затем устанавливается onPostExcetute - в ImageView, я думаю. – greenapps

ответ

1

конвертировать ваш в потоке в строке затем декодировать его в растровом Somthing так:

String str = IOUtils.toString(in, encoding); 
byte[] decodedString = Base64.decode(str, Base64.NO_WRAP); 
Bitmap mIcon11 = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 

использовать этот код в Ьге блоке ... надеюсь, что это поможет.

+0

Пожалуйста, я не понимаю ваши коды, не могли бы вы кратко объяснить мне, спасибо – NewBIe

1
mIcon11 = BitmapFactory.decodeStream(in); 

mIcon11 - это растровое изображение.

Кроме того,

  1. Не используйте основной поток для длительных opperation. Вот хорошо article о async android;
  2. Я предпочел загрузить изображения с Picasso;
Смежные вопросы