Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将画布上的图像保存到SurfaceView中的文件_Android_Android Canvas - Fatal编程技术网

Android 将画布上的图像保存到SurfaceView中的文件

Android 将画布上的图像保存到SurfaceView中的文件,android,android-canvas,Android,Android Canvas,从我所看到的来看,我想做的即使可能也很难,但我希望至少有人能建议一种不太迂回的方式来做我想做的事情。下面的代码将项目绘制到画布上,所有这些都在自定义SurfaceView中。我想做的是,除了显示画布之外,将画布上的所有内容保存到一个文件中,以便在一些活动中使用,但我似乎不知道如何进行 public void draw() { if(holder.getSurface().isValid()) { Canvas canvas = holder.lockCanvas();

从我所看到的来看,我想做的即使可能也很难,但我希望至少有人能建议一种不太迂回的方式来做我想做的事情。下面的代码将项目绘制到画布上,所有这些都在自定义SurfaceView中。我想做的是,除了显示画布之外,将画布上的所有内容保存到一个文件中,以便在一些活动中使用,但我似乎不知道如何进行

public void draw()
{
    if(holder.getSurface().isValid()) {
        Canvas canvas = holder.lockCanvas();
        canvas.drawColor(0, Mode.CLEAR);
        drawSurface(canvas);
        canvas.translate(-56, 30);
        int i = 0;
        for(Picture a: accessories) {
            canvas.translate(0, a_offset[i]);
            if(a!=null) {
                canvas.drawPicture(a);
            }
            i++;
        }           
        holder.unlockCanvasAndPost(canvas);  
    }
}

private void drawSurface(Canvas canvas) {
    Rect rect = new Rect();
    rect.set(37*screenWidth/480, 146*screenHeight/800, (37 + 300)*screenWidth/480, (146 + 300)*screenHeight/800);
    canvas.drawBitmap(avatar, null, rect, null);
}

我目前保存文件的方法基本上是使用上述方法的副本,使用从位图创建的画布(
Canvas=newcanvas(bitmap)
,而不是
holder.lockCanvas
),并使用不同的数字来获得正确的位置和大小。我可以组合这些方法并给它们一些参数,至少可以避免使用不同的方法,但是如果可能的话,我只想绘制图像并使用相同的画布保存文件

您不应该存储画布。您应该存储图像变换矩阵和图像本身。然后,如果您想要检索,加载图像,加载其矩阵,将矩阵应用于图像,您应该会很好


或者您可以尝试将画布对象本身存储为blob数据,然后尝试使用blob从数据库中重新创建它。不过,我从来没有这样做过,在任何情况下都不推荐使用。

对不起,我没有说清楚——我不想存储画布,只想存储图像(以及变换矩阵,如果需要的话)。你能详细告诉我怎么做吗?使用从lockCanvas创建的画布似乎不容易。请检查此方法(getMatrix()),您可以在画布对象上调用它:这样显然可以得到矩阵,但如何存储图像?我只想要一个png,上面有我在画布上画的所有东西。