创建于Android的OpenGL的一个拉方的位图ES 2.0 [英] Creating a bitmap of a drawn square in android opengl es 2.0

查看:192
本文介绍了创建于Android的OpenGL的一个拉方的位图ES 2.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我画一个正方形使用OpenGL ES 2.0的,现在我想创建一个拉方的位图。任何人都可以请指导我该怎么做?请让我知道,如果我的问题不明确。谢谢

I have drawn a square using opengl es 2.0 and now i want to create a bitmap of that drawn square. Can anyone please guide me on how to do that? Please let me know if my question is not clear. Thanks

推荐答案

这是使用glReadPixels()来完成。这是缓慢的,但与OpenGL ES 2.0的Andr​​oid上唯一可用的方法。在Java:

It is done using glReadPixels(). This is slow, but is the only method available with OpenGL ES 2.0 on Android. In Java:

Bitmap buttonBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(mWidth * mHeight * 4);
GLES20.glReadPixels(0, 0, mWidth, mHeight, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, byteBuffer);
buttonBitmap.copyPixelsFromBuffer(byteBuffer);

然而,这是相当快,如果实施本地code:

However, it is considerably faster if implemented in native code:

JNIEXPORT jboolean JNICALL Java_com_CopyToBitmap(JNIEnv * env, jclass clazz, jobject bitmap)
{
AndroidBitmapInfo   BitmapInfo;
void *              pPixels;
int                 ret;

if ((ret = AndroidBitmap_getInfo(env, bitmap, &BitmapInfo)) < 0)
{
    LOGE("Error - AndroidBitmap_getInfo() Failed! error: %d", ret);
    return JNI_FALSE;
}

if (BitmapInfo.format != ANDROID_BITMAP_FORMAT_RGBA_8888)
{
    LOGE("Error - Bitmap format is not RGBA_8888!");
    return JNI_FALSE;
}

if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pPixels)) < 0)
{
    LOGE("Error - AndroidBitmap_lockPixels() Failed! error: %d", ret);
    return JNI_FALSE;
}

glReadPixels(0, 0, BitmapInfo.width, BitmapInfo.height, GL_RGBA, GL_UNSIGNED_BYTE, pPixels);

AndroidBitmap_unlockPixels(env, bitmap);
return JNI_TRUE;
}

这篇关于创建于Android的OpenGL的一个拉方的位图ES 2.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆