Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert view to bitmap on Android

I need to convert a view to a bitmap to preview my view and to save it as an image. I tried using the following code, but it creates a blank image. I cannot understand where I made a mistake.

 View viewToBeConverted;  Bitmap viewBitmap =   Bitmap.createBitmap(viewToBeConverted.getWidth(), viewToBeConverted.getHeight(),Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(viewBitmap);   viewToBeConverted.draw(canvas);   savephoto(“f1”, viewBitmap);    ////  public void savephoto(String filename,Bitmap bit)         {               File newFile = new File(Environment.getExternalStorageDirectory() + Picture_Card/"+ filename+ ".PNG");               try  {                     newFile.createNewFile();                     try  {                           FileOutputStream pdfFile = new FileOutputStream(newFile);                                                Bitmap bm = bit;                          ByteArrayOutputStream baos = new ByteArrayOutputStream();                          bm.compress(Bitmap.CompressFormat.PNG,100, baos);                                                     byte[] bytes = baos.toByteArray();                           pdfFile.write(bytes);                                                     pdfFile.close();                     }  catch (FileNotFoundException e)  {                          //           }               } catch (IOException e)  {                    //               }         }   
like image 340
SAM Bhadani Avatar asked Apr 04 '11 08:04

SAM Bhadani


2 Answers

here is my solution:

  public static Bitmap getBitmapFromView(View view) {         //Define a bitmap with the same size as the view         Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);         //Bind a canvas to it         Canvas canvas = new Canvas(returnedBitmap);         //Get the view's background         Drawable bgDrawable =view.getBackground();         if (bgDrawable!=null)              //has background drawable, then draw it on the canvas             bgDrawable.draw(canvas);         else              //does not have background drawable, then draw white background on the canvas             canvas.drawColor(Color.WHITE);         // draw the view on the canvas         view.draw(canvas);         //return the bitmap         return returnedBitmap;     } 

Enjoy :)

like image 99
Gil SH Avatar answered Sep 28 '22 05:09

Gil SH


The most voted solution did not work for me because my view is a ViewGroup(have been inflated from a LayoutInflater). I needed to call view.measure to force the view size to be calculated in order to get the correct view size with view.getMeasuredWidth(Height).

public static Bitmap getBitmapFromView(View view) {     view.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);     Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(),             Bitmap.Config.ARGB_8888);     Canvas canvas = new Canvas(bitmap);     view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());     view.draw(canvas);     return bitmap; } 
like image 26
dangel Avatar answered Sep 28 '22 05:09

dangel