3

从我在 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 并使用不同的数字来获得正确的位置和大小。我可以组合这些方法并至少给它们一些参数以避免使用不同的方法,但如果可能的话,我只想绘制图像并使用相同的画布保存文件。

4

1 回答 1

1

您不应该存储画布。您应该存储图像转换矩阵和图像本身。然后,如果您想检索,加载图像,加载其矩阵,将矩阵应用于图像,您应该没问题。

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

于 2012-10-23T20:24:59.220 回答