我正在尝试在画布上开发一个应用程序,我在画布上绘制一个位图。绘制后,我试图转换为位图图像。
任何人都可以给我一个建议。
提前谢谢。
答案 0 :(得分:68)
建议取决于你想要做什么。
如果您担心控件需要很长时间才能绘制,并且您想要绘制位图以便您可以通过blit重新绘制位图而不是通过画布重新绘制,那么不会想要双重猜测平台 - 控件自动将其绘图缓存到临时位图,甚至可以使用getDrawingCache()
如果要使用画布绘制位图,通常的配方是:
Bitmap.createBitmap()
Canvas(Bitmap)
构造函数答案 1 :(得分:21)
所以你创建了一个新的Bitmap
,例如:
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 )
width
和height
与您的画布相同。
接下来,使用canvas.setBitmap(myBitmap)
,但不是drawBitmap()
。
在您致电setBitmap
之后,您在画布上绘制的所有内容实际上都是通过我所示的示例代码绘制您的myBitmap
。
修改强>:
您无法直接创建位图,例如:
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 );
你必须改为:
Bitmap myBitmap = Bitmap.createBitmap( (int)Width, (int)Height, Config.RGB_565 );
答案 2 :(得分:2)
其他例子:
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;
}
答案 3 :(得分:1)
以下是从画布转换为位图并将其存储到图库或特定文件夹的步骤。
注意:请确保您已获得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 强>
创建父版面的参考
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
将其存储到图库
final String imagename = UUID.randomUUID().toString() + ".png";
MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
转换为位图
linearLayout.setDrawingCacheEnabled(true);
linearLayout.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());