2016-06-08 1 views
0

Я использую библиотеку Glide для загрузки удаленных URL-адресов в ImageView. Я хочу сохранить изображение из этого ImageView в галерею. (Я не хочу повторять другой сетевой вызов для загрузки того же изображения).Как сохранить изображение, прикрепленное к изображению?

Как мы можем это достичь?

+0

Возможный дубликат [Как один использовать скольжению, чтобы загрузить изображение в растровое изображение?] (Http://stackoverflow.com/questions/27394016/how- make-one-use-glide-to-download-an-image-in-a-bitmap) –

ответ

0
Glide.with(yourApplicationContext)) 
    .load(youUrl) 
    .asBitmap() 
    .into(new SimpleTarget<Bitmap>(myWidth, myHeight) { 
     @Override 
     public void onResourceReady(Bitmap bitmap, GlideAnimation anim) { 
      //set bitmap to imageview and save 
     } 
    }; 
+0

Я не хочу, чтобы изображение в режиме просмотра изображений сохранялось в галерее одновременно. На самом деле у меня есть recylcerview для всех изображений. У каждого элемента recyclerview есть возможность загрузить это изображение. При выборе опции загрузки я хочу получить изображение из ImageView (возможно, Bitmap), чтобы сохранить его в галерее. – Chetan

0
BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable(); 
    Bitmap bitmap = drawable.getBitmap(); 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 200, 200, false); 

    scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 60, byteArrayOutputStream); 
    String fileName = "image.jpeg"; 
    File file = new File("your_directory_path/" 
      + fileName); 
    try { 
     file.createNewFile(); 
     // write the bytes in file 
     FileOutputStream fileOutputStream = new FileOutputStream(file); 
     fileOutputStream.write(byteArrayOutputStream.toByteArray()); 
     // remember close the FileOutput stream 
     fileOutputStream.close(); 
     ToastHelper.show(getString(R.string.qr_code_save)); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     ToastHelper.show("Error"); 
    } 

Примечание: Если drawble не всегда InstanceOf BitmapDrawable

  Bitmap bitmap; 
     if (mImageView.getDrawable() instanceof BitmapDrawable) { 
      bitmap = ((BitmapDrawable) mImageView.getDrawable()).getBitmap(); 
     } else { 
      Drawable d = mImageView.getDrawable(); 
      bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
     } 

Попробуйте

+0

Использование библиотеки Glide .... – Cliff

0

Я не попробовать этот способ. Но я думаю, что это соответствует вашей проблеме. Поместите этот код на onBindViewHolder вашего адаптера RecyclerView.

Glide.with(yourApplicationContext)) 
    .load(youUrl) 
    .asBitmap() 
    .into(new SimpleTarget<Bitmap>(myWidth, myHeight) { 
     @Override 
     public void onResourceReady(Bitmap bitmap, GlideAnimation anim) { 
      //Set bitmap to your ImageView 
      imageView.setImageBitmap(bitmap); 

      viewHolder.saveButton.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View arg0) { 
          //Save bitmap to gallery 
          saveToGallery(bitmap); 
         } 
        }); 
     } 
    }; 
0

Это может помочь вам

public void saveBitmap(ImageView imageView) { 

    Bitmap bitmap = ((GlideBitmapDrawable) imageView.getDrawable()).getBitmap(); 
    String root = Environment.getExternalStorageDirectory().toString(); 
    File myDir = new File(root + "/My Images"); 
    myDir.mkdirs(); 
    Random generator = new Random(); 
    int n = 10000; 
    n = generator.nextInt(n); 
    String fname = "Image-" + n + ".jpg"; 
    File file = new File(myDir, fname); 
    if (file.exists()) file.delete(); 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
     out.flush(); 
     out.close(); 
    } catch (Exception ex) { 
     //ignore 
    } 
}