converting a canvas into bitmap image in android
I am trying to develop an app on canvas,I am drawing a bitmap on the canvas. After drawing, I am trying to convert into bitmap image.
Can anyone give me a suggestion?
Solution 1:
Advice depends upon what you are trying to do.
If you are concerned that your controls take a long time to draw, and you want to draw to a bitmap so you can blit the bitmap rather than re-drawing via a canvas, then you don't want to be double-guessing the platform - controls automatically cache their drawing to temporary bitmaps, and these can even be fetched from the control using getDrawingCache()
If you want to draw using a canvas to a bitmap, the usual recipe is:
- Create a bitmap of the correct size using
Bitmap.createBitmap()
- Create a canvas instance pointing that this bitmap using
Canvas(Bitmap)
constructor - Draw to the canvas
- Use the bitmap
Solution 2:
So you create a new Bitmap
, for example:
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 )
with width
and height
being the same as your canvas.
Next, use canvas.setBitmap(myBitmap)
, but not drawBitmap()
.
After you call setBitmap
, all what you draw on canvas is in fact, drawing on your myBitmap
going by the example code I have illustrated.
Edit:
You can not create a bitmap directly such as:
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 );
You must use instead:
Bitmap myBitmap = Bitmap.createBitmap( (int)Width, (int)Height, Config.RGB_565 );
Solution 3:
Other example:
public Bitmap getBitmapNews(int item , boolean selected, int numbernews){
Bitmap bitmap;
if(selected)
bitmap=mBitmapDown[item].copy(Config.ARGB_8888, true);
else
bitmap=mBitmapUp[item].copy(Config.ARGB_8888, true);
Canvas canvas = new Canvas(bitmap);
if(numbernews<10){
canvas.drawBitmap(mNotiNews[numbernews],0,0,null);
}else{
canvas.drawBitmap(mNotiNews[0],0,0,null);
}
return bitmap;
}
Solution 4:
Following are the steps to convert from canvas to bitmap and storing it to gallery or specific folder.
Note: Make sure you have given permission of WRITE_EXTERNAL_STORAGE
activity_main.xml
<LinearLayout
android:id="@+id/linearLayout"
android:orientation="horizontal"
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<DrawingView
android:id="@+id/drawingView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
MainActivity.java
-
Create reference of parent layout
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
-
To store it into gallery
final String imagename = UUID.randomUUID().toString() + ".png"; MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
-
To convert into bitmap
linearLayout.setDrawingCacheEnabled(true); linearLayout.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());