Fra*_*ank 2 android screenshot opengl-es-2.0
我有一个基本的openGL ES 20应用程序在GLSurfaceView上运行,该应用程序已添加:
GLSurfaceView view = new GLSurfaceView(this);
view.setRenderer(new OpenGLRenderer());
setContentView(view);
Run Code Online (Sandbox Code Playgroud)
基本上我正在尝试使用以下方法获取屏幕截图:
private static Bitmap getScreenshot(View v)
{
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.draw(c);
return b;
}
Run Code Online (Sandbox Code Playgroud)
但似乎位图是透明的.我传递的观点是:
View content = m_rootActivity.getWindow().getDecorView().getRootView();
Run Code Online (Sandbox Code Playgroud)
任何人都有一个关于如何在openGL ES上获取屏幕截图的解决方案,而无需使用我在其他解决方案中看到的DrawFrame方法.
也许传递渲染器的参考?任何帮助,将不胜感激.
更新:我正在探索从onDrawFrame渲染位图(显示黑屏,同时捕获GLSurfaceView的截图)
但是,我想知道是否有更好的解决方案,因为我无法访问渲染器和surfaceview.我可以传递他们的参考,但想要一个解决方案,我们可以像前面提到的那样捕获整个视图.
你可以获得截图:
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
// draw ...
if (takeScreenshot) {
int screenshotSize = width * height;
ByteBuffer bb = ByteBuffer.allocateDirect(screenshotSize * 4);
bb.order(ByteOrder.nativeOrder());
GLES20.glReadPixels(0, 0, width, height, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, bb);
int pixelsBuffer[] = new int[screenshotSize];
bb.asIntBuffer().get(pixelsBuffer);
bb = null;
for (int i = 0; i < screenshotSize; ++i) {
// The alpha and green channels' positions are preserved while the red and blue are swapped
pixelsBuffer[i] = ((pixelsBuffer[i] & 0xff00ff00)) | ((pixelsBuffer[i] & 0x000000ff) << 16) | ((pixelsBuffer[i] & 0x00ff0000) >> 16);
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixelsBuffer, screenshotSize-width, -width, 0, 0, width, height);
// save bitmap...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2275 次 |
| 最近记录: |