在Android中将canvas转换为位图图像

我正试图在canvas上开发一个应用程序,我在canvas上绘制位图。绘制完成后,我正在尝试将其转换为位图图像。

谁能给我一个build议。

先谢谢你。

build议取决于你正在尝试做什么。

如果你担心你的控件需要很长时间才能绘制,而且你想绘制一个位图,所以你可以通过一个canvas来刷新位图,而不是重新绘制,那么你希望对平台进行双重猜测- 控件自动将其绘图caching到临时位图,甚至可以使用getDrawingCache()从控件中提取这些getDrawingCache()

如果要使用canvas绘制位图,通常的方法是:

  1. 使用Bitmap.createBitmap()创build正确大小的位图
  2. 使用Canvas(Bitmap)构造函数创build一个指向该位图的canvas实例
  3. 绘制到canvas上
  4. 使用位图

所以你创build一个新的Bitmap ,例如:

Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 )

widthheight与您的canvas相同。

接下来,使用canvas.setBitmap(myBitmap) ,而不是drawBitmap()

在你调用setBitmap ,你在canvas上绘制的所有东西都是绘制在你的myBitmap并且通过我已经说明的示例代码。

编辑

您不能直接创build一个位图,如:

 Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 ); 

你必须改用:

 Bitmap myBitmap = Bitmap.createBitmap( (int)Width, (int)Height, Config.RGB_565 ); 

其他例子:

 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; } 

以下是将canvas转换为位图并将其存储到图库或特定文件夹的步骤。

注意:确保您已经获得了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

  1. 创build父布局的引用

     LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout); 
  2. 将其存储到画廊

     final String imagename = UUID.randomUUID().toString() + ".png"; MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing"); 
  3. 转换成位图

     linearLayout.setDrawingCacheEnabled(true); linearLayout.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());