2017-12-11 7 views
0

Ich versuche, mein Bild von imageView in Bitmap zu speichern, so dass ich es in der Galerie des Android-Geräts speichern kann. Jedes Mal, wenn ich ein Bild speichere, wird der Hintergrund von imageView nicht gespeichert. Was vermisse ich?Wie Hintergrundbild von ImageView in Bitmap speichern?

Hier ist mein Code:

ImageView imageView = (ImageView) findViewById(R.id.img); 
imageView.setBackgroundResource(R.drawable.img1); 
BitmapDrawable draw = (BitmapDrawable) imageView.getDrawable(); 
Bitmap bitmap = draw.getBitmap(); 

Code, um das Bild in der Galerie zu speichern ist:

FileOutputStream outStream = null; 
      File dir = new File(
        Environment 
          .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
        "MyAlbum"); 
      if (!dir.exists()) { 
       if (!dir.mkdirs()) { 
        Log.d("MyAlbum", "failed to create directory"); 
        Toast.makeText(MainActivity.this, "Failed to make directory", Toast.LENGTH_SHORT).show(); 
       } 
      } 
      String fileName = String.format("%d.jpg", System.currentTimeMillis()); 
      File outFile = new File(dir, fileName); 
      try { 
       outStream = new FileOutputStream(outFile); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 
       outStream.flush(); 
       outStream.close(); 

       Toast.makeText(getApplicationContext(), "PICTURE SAVED", Toast.LENGTH_SHORT).show(); 
       Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
       intent.setData(Uri.fromFile(dir)); 
       sendBroadcast(intent); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
+0

Haben Sie einen Adapter? Können Sie verwandte Standorte Code – propoLis

+0

wo ist der Rest-Code, um das Bild in den Speicher zu speichern ?? –

+0

@ankitDemonstrate Sie können den Code sehen, um das Bild in den Speicher jetzt zu speichern –

Antwort

1

Sie können eine sc nehmen Reenshot dieser Ansicht (ImageView) in diesem Fall wird einfach genommen, was auf dieser Ansicht in diesem Moment gezeichnet wird und es in eine Bitmap verwandeln, die Sie speichern können.

Antwort wird bereits erwähnt here.

Die magische Teil ist, dass

ImageView yourImageView = .. // Get reference it to your view. 
yourImageView.setDrawingCacheEnabled(true); 
Bitmap bitmap = Bitmap.createBitmap(yourImageView.getDrawingCache()); 
yourImageView.setDrawingCacheEnabled(false); 

Ta-da Sie Ihren Schnappschuss btimap verwenden können.

+0

Vielen Dank (Y) –

+0

Vergessen Sie nicht zu markieren Antwort akzeptiert, wenn es für Sie funktioniert! Prost – elmorabea

+0

Wenn ich den Screenshot von imageView mache, haben beide Bilder unterschiedliche Breiten und Höhen. Das Bild mit geringerer Höhe dehnt sich aus und ruiniert das Bild. @elmorabea –

0

Sie können dies ausprobieren,

private void saveImageToStorage(Bitmap finalBitmap, String image_name) { 

     String root = Environment.getExternalStorageDirectory().toString(); 
     File myDir = new File(root); 
     myDir.mkdirs(); 
     String fname = "Image-" + image_name+ ".jpg"; 
     File file = new File(myDir, fname); 
     if (file.exists()) file.delete(); 
     Log.i("LOAD", root + fname); 
     try { 
      FileOutputStream out = new FileOutputStream(file); 
      finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
      out.flush(); 
      out.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Glücklich Codierung: -)

+0

Ihre Antwort ist völlig anders als was in Frage gestellt –

Verwandte Themen