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

时间:2012-10-23 20:19:31

标签: android android-canvas

从我在SO上看到的情况来看,即使可能,我想要做的事情也很困难,但我希望有人能够至少建议一种不那么迂回的方式来做我想做的事情。下面的代码将项目绘制到画布上,所有这些都在自定义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 = new Canvas(bitmap)而不是holder.lockCanvas)创建的Canvas,并使用不同的数字来获取位置和大小正确。我可以组合这些方法,并给它们一些参数,至少避免使用不同的方法,但我想绘制图像并使用相同的画布保存文件,如果可能的话。

1 个答案:

答案 0 :(得分:1)

您不应该存储画布。您应该存储图像变换矩阵和图像本身。然后,如果你想要检索,加载图像,加载它的矩阵,将矩阵应用到图像,你应该没事。

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