Android:检查是否有任何东西被绘制到 Android Canvas

标签 android canvas bitmap android-canvas android-bitmap

我正在用 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;
        }
    }
}

这里我将 View 的drawingCache 保存到位图数组中。 在这里,即使我的 Canvas 是空的,仍然会保存一张空白图像。

我不想要那个。我只想在 Canvas 上有任何绘图时保存。
那么有什么办法可以做到这一点??

或者有什么方法可以检查 Canvas 上是否有绘图??

最佳答案

不要使用绘图缓存。在您的 View 中有一个方法,如 getBitmap() 并使用该方法获取位图。您正在使用 Canvas 的默认位图。这很难操作,而是创建您自己的位图,然后在该位图上绘制。这是一种更好的方法,不仅满足您的要求,而且也适用于操作位图。

更新:您可以创建自己的位图并按如下方式在其上绘制

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);

现在你可以使用这个 Canvas 对象来绘制你想要的东西了。在我的应用程序中,我专门安排了整个类(class)来处理绘图。我使用 CustomView 的 onDraw() 来查看此位图并进行缩放。原始绘图发生在我的专用类里面。我已经覆盖了 onTouchEvent() 并使用它来处理各种绘图手势并使用这些输入在我的自定义位图上绘图。

但是如果你打算使用 drawingCache,那么检查这个:How to check if a Bitmap is empty (blank) on Android

关于Android:检查是否有任何东西被绘制到 Android Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33172732/

相关文章:

javascript - 使用 D3.js 是重新绘制对象还是 "move"对象更好?

javascript - HTML5 JavaScript : canvas context draw raster in for loop

android - 将 ListView 项转换为单个位图图像

android - Drawable 的 ArrayList 还是 Bitmap 的 ArrayList?

java - Android中解析json对象和json数组

android - React Native map 编译错误 debugJavaWithJavac

Android 2.2 弃用 restartPackage 但又增加了一个令人头疼的问题

javascript - 如何使用javascript onload 下载多个图像?

android - Tesseract 致命信号 11(SIGSEGV 错误

Android 单元测试 - SQLiteReadOnlyDatabaseException : Attempt to write a readonly database (code 1032)