我在android中制作绘图应用程序。
这里我将画布上的绘图保存为png图像。我正在使用Bitmap数组从画布中保存绘图。
if(view.getId()==R.id.save_btn){
//save drawing
AlertDialog.Builder saveDialog = new AlertDialog.Builder(this);
saveDialog.setTitle("Save drawing");
saveDialog.setMessage("Save drawing to device Gallery?");
saveDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
int k=0;
//save drawing
while(bits[k]!=null) {
Bitmap m = null;
m = bits[k];
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
File file = new File(path + File.separator + "Pictures" + File.separator + k + "_image.png");
FileOutputStream ostream;
try {
file.createNewFile();
ostream = new FileOutputStream(file);
m.compress(Bitmap.CompressFormat.PNG, 100, ostream);
ostream.flush();
ostream.close();
Toast.makeText(getApplicationContext(), "image saved :" + path, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_SHORT).show();
}
k=k+1;
}
i=0;
bits=null;
}
}
}
这里我将视图的 drawingCache 保存到位图数组中。 即使我的画布为空,仍然会保存空白图像。
我不想那样。我只想在画布上有任何绘图时保存 有没有办法做到这一点??
或者有没有办法检查画布上是否有任何绘图?
答案 0 :(得分:1)
不要使用drawingCache。在您的View中有一个方法,如getBitmap(),并使用该方法获取位图。您正在使用画布的默认位图。这很难操作,而是创建自己的位图,然后在该位图的顶部绘制。这是一种更好的方法,不仅可以满足您的需求,还可以操作位图。
更新:您可以创建自己的位图并按如下方式绘制
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
现在您可以使用此画布对象来绘制您想要的内容。在我的申请中,我专门用了一整个班级来处理绘图。我使用CustomView的onDraw()
来查看此位图并进行缩放。原始绘图发生在我的专用课程中。我已经覆盖了onTouchEvent()
并使用它来处理各种绘图手势并使用这些输入来绘制我的自定义位图。
但是如果您打算使用drawingCache,那么请检查一下:How to check if a Bitmap is empty (blank) on Android
答案 1 :(得分:0)
请查看https://stackoverflow.com/a/29938454/755804处的代码,它会检查是否绘制了给定的Unicode字符或显示为空格。
检查完成于:
boolean res = !orig.sameAs(bitmap);