2011-02-11 65 views
1

我正面臨使用本機代碼顯示位圖的問題。我的代碼如下從android中的本地代碼顯示位圖的問題

本機代碼

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?

+0

是不是`renderbitmap`期望4個參數?你能發佈實際的錯誤嗎? – xil3 2011-02-11 16:13:23

+0

當我調試時出現實際錯誤我可以在memcpy上看到SIGSEGEV。不知道我是否發送更少的字節數或更多? renderbitmap需要2個參數,因爲其他兩個參數都是jni默認值。 – 2011-02-11 16:16:07

回答

1

我想你應該申報pictureRGB如下:

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

然後複製像素做到以下幾點:

memcpy(pixels, pictureRGB, 480*320*sizeof(uint16_t)); 
相關問題