Android drawBitmap()和/或compress()只写入图像的一部分

时间:2014-02-04 08:19:39

标签: android bitmap compression export png

我正在尝试将位图导出到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;
        }
    }

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

1 个答案:

答案 0 :(得分:0)

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