背景:
目标是使用 OpenGL 渲染数据编写一个相当大(至少 2048 x 2048 像素)的图像文件。
今天我首先使用 glReadPixels 将 32 位(argb8888)像素数据放入一个 int 数组中。
然后我将数据复制到一个新的短数组中,将 32 位 argb 值转换为 16 位 (rgb565) 值。此时我也将图像倒过来,改变颜色顺序,使opengl-image数据与android位图数据兼容(不同的行顺序和颜色通道顺序)。
最后,我创建了一个 Bitmap() 实例和 .copyPixelsFromBuffer(Buffer b) 以便能够将其作为 png 文件保存到磁盘。
但是,我想更有效地使用内存,以避免某些手机上的内存不足崩溃。
问题:
我可以以某种方式跳过从 int[] -> short[] 的第一次转换(并避免为像素数据分配新数组)吗?也许只是使用字节数组/缓冲区并将转换后的像素写入我读取的同一个数组......
更重要的是:我可以跳过位图创建(程序崩溃的地方)并以某种方式将数据作为工作图像文件直接写入磁盘(并避免在位图对象中再次分配像素数据)?
编辑:如果我可以将数据直接写入文件,也许我不需要转换为 16 位像素数据,具体取决于文件大小以及稍后将文件读入内存的速度。