【问题标题】:Android drawBitmap() and/or compress() only writes part of imageAndroid drawBitmap() 和/或 compress() 只写入图像的一部分
【发布时间】:2014-02-28 02:41:41
【问题描述】:

我正在尝试将位图导出为 PNG 文件,但每当我打开 PNG 文件时,它只会呈现前几行。我已经简化了我的代码,只是将青色绘制到位图上,然而,在导出时,它只绘制了图像顶部的 1/8 或 1/4。

即,我的 canvasWidth 和 canvasHeight 是 2560x1600,这是 Galaxy Note 10.1 2014 Ed 的大小,只有前 349 行左右的像素呈现青色,其余为空白。

    Bitmap bmp = Bitmap.createBitmap(canvasWidth, canvasHeight, Config.ARGB_8888);
    Canvas canvas = new Canvas(bmp);

    canvas.drawColor(Color.CYAN);

    FileOutputStream fs = null;
    try
    {
        fs = new FileOutputStream(f);

        if (!bmp.compress(CompressFormat.PNG, 100, fs))
        {
            Toast.makeText(context, "Compression failure", Toast.LENGTH_LONG).show();
            errorCode = ERR_STREAM_CORRUPTED;
        }
    }
    catch (FileNotFoundException e)
    {
        errorCode = ERR_FILE_NOT_FOUND;
    } 
    catch (IOException e)
    {
        errorCode = ERR_IO_EXCEPTION;
    }
    finally
    {
        try
        {
            if (fs != null)
            {
                fs.flush();
                fs.close();
            }

        }
        catch (IOException e)
        {
            errorCode = ERR_IO_EXCEPTION;
        }
    }

在我压缩和写入文件流时位图没有完全写入内存是否存在问题?我似乎无法弄清楚为什么这不起作用。

【问题讨论】:

  • 你可以试试更小的宽度和高度,看看是否有什么不同?
  • 我试过 1280x720,只填了前 580 行左右。我试过 640x480,填满了完整的图像。1280x720 对我来说有点需要输出尺寸。
  • 更多更新。重新启动我的设备后,我可以第一次写出完整的 1280x720 PNG 图像。如果我杀死我的应用程序并重新启动它并尝试重新导出,它只会导出一半的图像。如果这是一个内存问题,我宁愿让这个警告我内存不足或其他什么,但否则,我如何判断我是否内存不足和/或如何更好地管理我的位图内存?
  • Rect rect = new Rect(0,0, canvasWidth, canvasHeight);油漆油漆 = 新油漆(); paint.setFilterBitmap(true);油漆.setColor(颜色.青色); canvas.drawBitmap(bmp, null, dest, paint);可以这样试试吗?
  • 我不确定你的意思。 bmp 是我的目标位图,但您的示例将其用作源位图。无论如何,我已经用 drawRect() 尝试了上面的代码,结果相同。我有一种感觉,我只是没有很好地管理我的位图。我遗漏的是,我有 3 个其他位图分配有相同的 2560x1600 尺寸,我将尝试回收其中一个,或者至少先 gc 它们。

标签: android bitmap compression export png


【解决方案1】:

结果表明 Bitmap.compress() 按预期工作。我的问题是我依赖三星的文件浏览桌面实用程序在文件被写出时进行更新。这是一个禁忌。在这种情况下,桌面浏览工具非常错误,使用设备上的图像查看应用程序检查 PNG 文件(我使用了 QuickPic 并且现在完全认可它)显示了真实的文件输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2016-03-07
    • 2017-01-04
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    相关资源
    最近更新 更多