【问题标题】:Saving a canvas in Android does not work every time在 Android 中保存画布并非每次都有效
【发布时间】:2015-02-23 19:26:19
【问题描述】:

我有这个代码:

public void saveimage() {
    Bitmap bitmap = Bitmap.createBitmap(colorGFX.getWidth(),
            colorGFX.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    canvas.drawColor(Color.WHITE);
    canvas = colorGFX.canvas;
    canvas.setBitmap(bitmap);
    saveBitmap(bitmap);
}

colorGFX 对象扩展了 SurfaceView。

saveBitmap 实际上将图像写入文件。

问题是大多数时候保存的是白色图像,而其他时候保存的是正确的图像。

我是否遗漏了什么,或者为什么图像只保存了 1/5 次?

【问题讨论】:

  • 如果替换3行Canvas canvas = new Canvas(bitmap); canvas.drawColor(Color.WHITE);画布 = colorGFX.canvas;只有 1 行:Canvas canvas = colorGFX.canvas;会发生什么?
  • 然后保存一个空白(黑色)图像。
  • 如果你添加 colorGFX.invalidate();就在 canvas.setBitmap(bitmap); 之前你得到了什么?
  • 什么也没发生。和以前一样,有时它会保存图像,但大多数时候它会保存一个白色的空图像。

标签: android canvas surfaceview


【解决方案1】:

这对我有用:

Bitmap bitmap = Bitmap.createBitmap(colorGFX.getWidth(),
            colorGFX.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(colorGFX.bitmap, 0f, 0f, null);
canvas.drawBitmap(colorGFX.pictureBitmap, 0f, 0f, null);
saveBitmap(bitmap);

【讨论】:

    【解决方案2】:

    试试这个:

    public void saveimage() {
        Bitmap bitmap = Bitmap.createBitmap(colorGFX.getWidth(),
                colorGFX.getHeight(), Bitmap.Config.ARGB_8888);
        colorGFX.draw(new Canvas(bitmap))
        saveBitmap(bitmap);
    }
    

    【讨论】:

    • 保存相同的空白图像(黑色)。
    • 在这种情况下,您需要检查您的 colorGFX 对象/视图。你如何使用它?它是如何布置的?能否提供colorGFX的代码源?
    • 看到什么异常了吗?
    • @CristianG:我无法测试你的代码,当我触摸屏幕时它崩溃了。我怀疑你视图中的线程会阻止你的画布在你调用 saveBitmap 时可用。
    猜你喜欢
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多