在Android NDK中有一個名爲JNI Graphics的庫。那是什麼?我可以使用它爲C/C++加載OpenGL ES的圖像嗎?什麼是JNI圖形或如何使用它?
7
A
回答
16
jnigraphics
庫可以用於從android.bitmap.Graphics
類(當然是Java語言)在C/C++中訪問位圖緩衝區。在下面的NDK文檔中有更詳細的描述:
android-ndk-r5b/docs/STABLE-APIS.html
它可以用來加載圖像,例如,在C/C++中使用OpenGL ES,但是您必須做一些工作才能將jobject
交給該庫,以便它可以直接訪問緩衝區。您可以通過glTexImage2D()
將該緩衝區傳遞給OpenGL。
首先,你需要一個Java Bitmap
對象,你可以獲取並傳遞給你這樣的本地方法:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
...
BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),
R.drawable.myimage, options);
MyJniMethod(bitmap); // Should be static in this example
即本地方法可以是這個樣子:
#include <android/bitmap.h>
void MyJniMethod(JNIEnv *env, jobject obj, jobject bitmap) {
AndroidBitmapInfo info;
uint32_t *pixels;
int ret;
AndroidBitmap_getInfo(env, bitmap, &info);
if(info.format != ANDROID_BITMAP_FORMAT_RGBA_8888) {
LOGE("Bitmap format is not RGBA_8888!");
return false;
}
AndroidBitmap_lockPixels(env, bitmap, reinterpret_cast<void **>(&pixels));
// Now you can use the pixel array 'pixels', which is in RGBA format
}
保持記住,當你完成像素緩衝時,你應該調用AndroidBitmap_unlockPixels()
,並且這個例子根本不檢查錯誤。
希德達塔的問題更新:您可以保證輸出圖像格式是你加入這上面的選項期待什麼:
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
有一種情況下輸出圖像將仍然在JNI中以未知格式結束。這似乎只發生在GIF上。調用BitmapFactory.decodeResource()
後,可以將圖像轉換爲在必要時正確的格式:
if (bitmap.getConfig() != Bitmap.Config.ARGB_8888) {
Bitmap reformatted_bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, false);
bitmap.recycle(); /* reduce memory load in app w/o waiting for GC */
bitmap = reformatted_bitmap;
}
相關問題
- 1. 什麼是NDK,我如何使用JNI?
- 2. 什麼是四元數?它在圖形中如何使用?
- 3. JNI中的「jobject this」是什麼,它用於什麼?
- 4. eclipse中的星形圖標是什麼?如何抹去它們?
- 5. 什麼是com.android.vending.BILLING,如何使用它?
- 6. 什麼是nsoperation?如何使用它?
- 7. 什麼是args,我如何使用它?
- 8. 什麼是ipc?我如何使用它?
- 9. 什麼是access_token,什麼是使用目的或它用於什麼目的?
- 10. 什麼是多態,它的兩種形式或多種形式?
- 11. 什麼是PS3 Root密鑰/它有什麼作用/它是如何使用的?
- 12. JNI中的「ni」是什麼?
- 13. SSMA時間戳。它是什麼,它是如何使用的?
- 14. 什麼是YQL?它是否像jQuery?我如何使用它?
- 15. 什麼是el/element?我如何使用它?爲什麼?
- 16. 什麼是Cometd?爲什麼它被使用和如何工作
- 17. 什麼是JNI調用的android系統
- 18. PorterDuff.Mode在Android圖形中的含義是什麼?它有什麼作用?
- 19. 什麼orm使用或只是不使用它
- 20. typedef void(* MyCallback):它是什麼以及如何使用它?
- 21. Magento XMLConnect ...它是什麼以及如何使用它?
- 22. ObjectSpace - 它是什麼以及人們如何使用它?
- 23. Plist:它是什麼以及如何使用它
- 24. 什麼是=>調用,它是如何在C#中使用的
- 25. 隨機漫步如何在圖形上工作?爲什麼人們使用它?
- 26. 什麼是視圖...視圖?它是如何工作的?
- 27. 如何使用FQL或Facebook圖形API
- 28. JAVAH而使用它在JNI
- 29. OpenCV到JNI如何使它工作?
- 30. 什麼圖形庫用於Cython圖形?
能夠保證所有的像素被裝在RGBA格式,在Android中的所有版本? – 2013-05-24 00:54:26