Android NDK에는 JNI Graphics라는 라이브러리가 있습니다. 그게 뭐야? OpenGL ES 용 이미지를 C/C++로로드 할 때 사용할 수 있습니까?JNI 그래픽이란 무엇입니까?
7
A
답변
16
android.bitmap.Graphics
클래스 (Java에서는 물론)에서 C/C++의 비트 맵 버퍼에 액세스하려면 jnigraphics
라이브러리를 사용할 수 있습니다. 아래의 NDK와 함께 제공되는 설명서에서 더 자세히 설명되어 있습니다.
android-ndk-r5b/docs/STABLE-APIS.html
예를 들어 다음과 같은 이미지를로드하는 데 사용할 수 있습니다. C/C++에서 OpenGL ES를 사용하지만 버퍼에 직접 액세스 할 수 있도록 해당 라이브러리에 jobject
을 넘겨 주어야합니다. 버퍼를 glTexImage2D()
을 통해 OpenGL에 전달할 수 있습니다.
#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
}
유지 : 기본 방법은 다음과 같이 보일 수
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
그건 :
첫째, 당신은 당신이 획득하고이 같은 네이티브 메소드에 전달할 수있는 자바 Bitmap
객체를 필요 픽셀 버퍼가 끝나면 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. 'JNI 글로벌 참조'란 무엇입니까
- 2. JNI 자바 ++
- 3. UnsatisfiedLinkError JNI
- 4. JNI 성능
- 5. JNI : HashMap 만들기
- 6. DLL이 JNI 클래스에서 영원히로드됩니다.
- 7. JNI 힙 손상 문제를 디버그하는 방법은 무엇입니까?
- 8. 혼합 된 JNI 코드를 디버깅하는 방법은 무엇입니까?
- 9. Java JNI 스택 폴 방지
- 10. JNI 문자열 손상
- 11. JNI 응용 프로그램 상태
- 12. 정적 라이브러리 및 JNI
- 13. JNI 애플리케이션 프로파일 링
- 14. JNI - thread와 jobject의 문제
- 15. Java에서 DLL로드 - Eclipse - JNI
- 16. JNI 리스너 구현
- 17. Android - JNI guidelines
- 18. JNI 충돌 처리
- 19. Android JNI GDB
- 20. JNI- FindClass가 null을 반환합니다.
- 21. NDK, JNI 및 libcurl
- 22. 우분투에서 JNI 라이브러리 사용
- 23. OSX의 JNI 문제
- 24. Jni 참조 표 오버플로
- 25. Eclipse가있는 JNI 설정
- 26. JNI Poll 문제
- 27. JNI - GetObjectField가 NULL을 반환합니다.
- 28. JNI 예 이클립스에서
- 29. JNI 새로운 프리미티브 유형
- 30. JNI 및 정적 인터페이스
그것은 픽셀은 안드로이드의 모든 버전에서, RGBA 형식으로 포장되는 것을 보장되어 있습니까? –