private Bitmap createBitmapFromGLSurface(int x,int y,int w,int h,GL10 gl) throws OutOfMemoryError { int bitmapBuffer[] = new int[w * h]; int bitmapSource[] = new int[w * h]; IntBuffer intBuffer = IntBuffer.wrap(bitmapBuffer); intBuffer.position(0); try { gl.glReadPixels(x,y,w,h,GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE,intBuffer); int offset1,offset2; for (int i = 0; i < h; i++) { offset1 = i * w; offset2 = (h - i - 1) * w; for (int j = 0; j < w; j++) { int texturePixel = bitmapBuffer[offset1 + j]; int blue = (texturePixel >> 16) & 0xff; int red = (texturePixel << 16) & 0x00ff0000; int pixel = (texturePixel & 0xff00ff00) | red | blue; bitmapSource[offset2 + j] = pixel; } } } catch (GLException e) { return null; } return Bitmap.createBitmap(bitmapSource,Bitmap.Config.ARGB_8888); } public String grabScreenShots(final String fileName) { String filePath = fileName; GL10 g1 = glSurView.getGLHandler(); int w = glSurView.getWidth(); int h = glSurView.getHeight(); Log.e("w",String.valueOf(w)); Log.e("h",String.valueOf(h)); Bitmap bmp = createBitmapFromGLSurface(0,g1); File file = new File(filePath); try { file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); bmp.compress(CompressFormat.JPEG,100,fos);
// Toast.makeText(getApplicationContext(),“Image Saved”,0).show();
// Log.i(“Menu Save Button”,“Image saved as JPEG”);
} catch (Exception e) {
e.printStackTrace();
}
return filePath;
}
Render ondrawFrame中get到GL10对象,吐出来喂食 glSufaceview可以get到width、height createBitmapFromGLSurface()