从android中的本机代码显示位图的问题

时间:2011-02-11 16:06:17

标签: android bitmap android-ndk

我遇到使用本机代码显示位图的问题。我的代码如下

原生代码

 JNIEXPORT void JNICALL Java_app_Panel_renderbitmap(JNIEnv* env, jobject obj,  jobject bitmap, jlong time_ms)
 {
 AndroidBitmapInfo  info;
void*              pixels;
int                ret;

if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < 0) {
    return;
}

if (info.format != ANDROID_BITMAP_FORMAT_RGB_565) {
    return;
}

if ((ret =AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) {
}

memcpy(pixels, pictureRGB, 480*320);

AndroidBitmap_unlockPixels(env, bitmap);
}

Java代码

         Bitmap mBitmap = Bitmap.createBitmap(480, 320, Bitmap.Config.RGB_565);
         renderbitmap(mBitmap, 0);
         canvas.drawBitmap(mBitmap, 0, 0, null);

我的应用程序在memcpy崩溃,其中pictureRGB被声明为        int * pictureRGB [4];

所有像素都在pictureRGB内。我的方式有什么不对吗?我将正确的值传递给位图和memcpy吗?

1 个答案:

答案 0 :(得分:1)

我认为您应该声明pictureRGB如下:

uint16_t *pictureRGB;
pictureRGB = malloc(sizeof(uint16_t)*480*320);

然后复制像素,执行以下操作:

memcpy(pixels, pictureRGB, 480*320*sizeof(uint16_t));