【发布时间】: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