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