Android Bitmap Pixels - 直接写入文件?

时间:2012-09-01 08:29:31

标签: 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 []的第一个转换 - >以某种方式缩短[]并避免为像素数据分配新数组?也许只使用字节数组/缓冲区并将转换后的像素写入我从...读取的同一个数组中

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

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

1 个答案:

答案 0 :(得分:3)

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