在android opengl es 2.0中创建绘制方块的位图

时间:2014-03-27 09:41:21

标签: android opengl-es bitmap opengl-es-2.0 android-bitmap

我使用opengl es 2.0绘制了一个正方形,现在我想创建一个绘制正方形的位图。任何人都可以指导我如何做到这一点?如果我的问题不明确,请告诉我。感谢

1 个答案:

答案 0 :(得分:2)

使用glReadPixels()完成。这很慢,但是在Android上使用OpenGL ES 2.0的唯一方法。在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);

但是,如果在本机代码中实现它会快得多:

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;
}