Android Bitmap Pixels - 直接写入文件?

cmb*_*man 5 android image opengl-es bitmap memory-optimization

背景:

目标是使用OpenGL渲染数据编写相当大(至少2048 x 2048像素)的图像文件.

今天我首先使用glReadPixels将32位(argb8888)像素数据转换为int数组.

然后我将数据复制到一个新的短数组中,将32位argb值转换为16位(rgb565)值.此时我还将图像上下颠倒并更改颜色顺序,使opengl-image数据与android位图数据兼容(不同的行顺序和颜色通道顺序).

最后,我创建了一个Bitmap()实例和.copyPixelsFromBuffer(缓冲区b),以便能够将其作为png文件保存到磁盘.

但是我想更有效地使用内存,以避免某些手机上的内存崩溃.


题:

  1. 我可以以某种方式跳过int [] - > short []的第一个转换(并避免为像素数据分配新数组)吗?也许只使用字节数组/缓冲区并将转换后的像素写入我读取的同一个数组中......

  2. 更重要的是:我可以跳过位图创建(这里是程序崩溃的地方)并以某种方式将数据直接写入磁盘作为工作图像文件(并避免在位图对象中再次分配像素数据)?

编辑:如果我可以直接将数据写入文件,也许我不需要转换为16位像素数据,具体取决于文件大小以及稍后可以将文件读入内存的速度.

leo*_*loy 3

我不确定这是否有帮助,但是这个PNGJ库允许逐行顺序编写 PNG。如果内存使用情况是您主要关心的问题(并且您可以按照渲染数据中最终 PNG 文件的顺序访问像素值),那么它可能会很有用。