要通過OpenGL ES保存處理後的圖像,我編碼如下。它運作良好。如何通過Android上的glReadPixels()獲取24位顏色信息?
ByteBuffer bb = ByteBuffer.allocate(mWidth * mHeight * 4);
mGL.glReadPixels(0, 0, mWidth, mHeight, GL_RGBA, GL_UNSIGNED_BYTE, bb);
try {
TJCompressor tjCompressor = new TJCompressor(bb.array(), 0, 0, mWidth, 0, mHeight, TJ.PF_RGB);
tjCompressor.setJPEGQuality(100);
tjCompressor.setSubsamp(TJ.SAMP_444);
return tjCompressor.compress(0);
} catch (Exception e) {
e.printStackTrace();
}
在此之後,以獲得24位顏色信息,而無需alpha通道用於保存存儲器和處理時間,我改變了線#1和如下的碼#2。
ByteBuffer bb = ByteBuffer.allocate(mWidth * mHeight * 3);
mGL.glReadPixels(0, 0, mWidth, mHeight, GL_RGB, GL_UNSIGNED_BYTE, bb);
然後附加地,我在MGL(GL10實例)的一個EGLConfig除去EGL_ALPHA_SIZE
。當調用GLUtils.texImage2D()方法時,我通過了GLES20.GL_RGB
作爲內部格式參數。
但是,結果表明有錯誤。結果圖像只有黑色,當我在glReadPixels()
方法調用後檢查bb
緩衝區的數據時,我發現所有數據都爲零。我需要建議。幫助,PLZ。
感謝您的詳細解答。我發現它在其他一些設備上正常工作。 –