我使用GPUImage庫來獲取屏幕截圖/效果。但是,在我的Acer Liquid Express with Gingerbread 2.3上,它僅適用於最大1280x720。試圖設置1600x1200原因位圖大小超過虛擬機預算和虛擬機不會讓我們分配7680000字節。潛水到代碼中,我發現以下幾點:減少Android OpenGL相機內存
IntBuffer ib = IntBuffer.allocate(mWidth * mHeight);
IntBuffer ibt = IntBuffer.allocate(mWidth * mHeight);
mGL.glReadPixels(0, 0, mWidth, mHeight, GL_RGBA, GL_UNSIGNED_BYTE, ib);
// Convert upside down mirror-reversed image to right-side up normal
// image.
for (int i = 0; i < mHeight; i++) {
for (int j = 0; j < mWidth; j++) {
ibt.put((mHeight - i - 1) * mWidth + j, ib.get(i * mWidth + j));
}
}
mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
mBitmap.copyPixelsFromBuffer(ibt);
正如你可以看到,它創建了2個緩衝器,每768萬個字節(1600×1200 * 4)和反向,因爲在OpenGL和Java不同的0,0座標。我想要的是刪除第二個緩衝區(以節省內存)並保持功能。可能嗎?如果我只是刪除ibt和的循環,它會創建沒有OutOfMemory異常的顛倒圖像。另外,保存RGB_565位圖會很好,但我絕對不會熟悉OpenGL。請指教。
你真的需要alpha通道嗎?很多時候,默認幀緩衝區的像素格式甚至沒有目標阿爾法位平面。即使是這樣,很多時候也不需要它。如果你消除它,你可以將尺寸減小1/4。 –
@ AndonM.Coleman我不需要alpha通道。你能正確修改源代碼嗎? – Eugene