Android: 检查是否有任何内容被绘制到 Android Canvas
Android: checking whether there is anything drawn in to Android Canvas
我正在 android 中制作绘图应用程序。
这里我将 canvas 上的绘图保存为 png 图像。我正在使用位图数组保存来自 canvas.
的绘图
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 保存到位图数组中。
这里即使我的 canvas 是空的,仍然保存一张空白图像。
我不想这样。我只想在 canvas.
上有任何绘图时保存
那么有什么办法可以做到吗??
或者有什么方法可以查看canvas上有没有画吗??
请查看 处的代码,它检查给定的 Unicode 字符是否被绘制或显示为空白。
检查完成于:
boolean res = !orig.sameAs(bitmap);
不要使用 drawingCache。在您的视图中有一个方法,如 getBitmap() 并使用该方法获取位图。您正在使用 canvas 的默认位图。这很难操作,而是创建您自己的位图,然后在该位图上绘制。这是一种更好的方法,不仅满足您的要求,而且也适用于操作位图。
更新:您可以创建自己的位图并按如下方式绘制
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
现在您可以使用这个canvas对象来绘制您想要的东西了。在我的应用程序中,我用了整个 class 来处理绘图。我使用 CustomView 的 onDraw()
来查看此位图并进行缩放。原图发生在我专用的class。我已经覆盖 onTouchEvent()
并使用它来处理各种绘图手势并使用这些输入在我的自定义位图上绘图。
但是如果您要使用 drawingCache,请检查一下这个:
我正在 android 中制作绘图应用程序。
这里我将 canvas 上的绘图保存为 png 图像。我正在使用位图数组保存来自 canvas.
的绘图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 保存到位图数组中。 这里即使我的 canvas 是空的,仍然保存一张空白图像。
我不想这样。我只想在 canvas.
上有任何绘图时保存
那么有什么办法可以做到吗??
或者有什么方法可以查看canvas上有没有画吗??
请查看 处的代码,它检查给定的 Unicode 字符是否被绘制或显示为空白。
检查完成于:
boolean res = !orig.sameAs(bitmap);
不要使用 drawingCache。在您的视图中有一个方法,如 getBitmap() 并使用该方法获取位图。您正在使用 canvas 的默认位图。这很难操作,而是创建您自己的位图,然后在该位图上绘制。这是一种更好的方法,不仅满足您的要求,而且也适用于操作位图。
更新:您可以创建自己的位图并按如下方式绘制
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
现在您可以使用这个canvas对象来绘制您想要的东西了。在我的应用程序中,我用了整个 class 来处理绘图。我使用 CustomView 的 onDraw()
来查看此位图并进行缩放。原图发生在我专用的class。我已经覆盖 onTouchEvent()
并使用它来处理各种绘图手势并使用这些输入在我的自定义位图上绘图。
但是如果您要使用 drawingCache,请检查一下这个: