2013-04-17 94 views
0

我想在java中創建一個位圖,傳遞它的引用並用C++處理它,並在java中看到 的結果。 特別,我嘗試以下,但沒有結果:從Java到C++傳遞位圖參考?

JNIEXPORT void JNICALL Java_com_dacuda_scannermousetablet_ui_activities_HomeActivity_setChangeBitmap(
    JNIEnv *env, jobject obj, jobject bitmap) { 


mainEnv = env; 
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) { 
} 

uint16_t *pictureRGB; 
int size = sizeof(uint16_t)*info.width*info.height; 
pictureRGB = (uint16_t*)malloc(sizeof(uint16_t)*info.width*info.height); 
memcpy((char*)pixels, (char*)pictureRGB, info.width*info.height*sizeof(uint16_t)); 


mEdit = new EditImage((char*)pictureRGB, info.width, info.height); 
mEdit->changeBrightness(); 

}

我只是有一個已經變位在Java方面,但遺憾的是它不工作。

回答

0

你需要做相應地調用AndroidBitmap_unlockPixels

此外,下面的代碼只需填寫您的圖片與「隨機」的數據:

pictureRGB = (uint16_t*)malloc(sizeof(uint16_t)*info.width*info.height); 
memcpy((char*)pixels, (char*)pictureRGB, info.width*info.height*sizeof(uint16_t)); 
+0

其實我有沒有在C經驗++和剛纔複製的memcpy ..部分。我的原始數據是像素,所以我應該使用像素進行操作。因此我想我應該將像素複製到pictureRGB,使用pictureRGB進行操作並調用memcpy((char *)像素,(char *)pictureRGB,info.width * info.height * sizeof(uint16_t));方法。我對嗎? – someUser

+0

您可以直接操作像素或設置pictureRGB'uint16_t * pictureRGB =&像素' – Frohnzie