2014-09-19 2 views
-1

비트 맵 데이터를 갖는 void *를 변환해야합니다. void *는 cpp 함수에서 반환되며 Jni에 전달되는 void *를 Java로 변환하여 비트 맵으로 표시해야합니다.void *를 바이트 배열로 변환

Void * buffer = CppClass->getbuffer(); 
ByteArray byte[]; 

바이트 = void *의 내용;

+2

당신은 c/C++ 기초를 배워야합니다 ... reinterpret_cast가 도움이 될 것입니다 – Selvin

+0

버퍼가 얼마나 클지 알 수 있습니까? 그리고 더 중요한 것은 얼마나 많은 유효한 데이터에 포함되어 있는가? – Deduplicator

+0

jbytearray에 void *를 캐스팅하려고했습니다. 하지만 안드로이드 측면에서 나는 Byte []가 필요하다. – iGo

답변

1

자바에는 void*이없고 jni에는 ByteArray이 없으므로 실행 환경이 명확하지 않습니다.

문제의 원인은 void * 픽셀 맵이므로 JNI와 Java 코드가 혼합 된 픽셀로 자바 비트 맵 객체를 만들고 싶다고 가정합니다.

먼저 Bitmap 클래스를 보면 copyPixelsFromBuffer이라는 편리한 함수가 있으며 유용하다고 보시면 Buffer이 걸립니다.

둘째, JNI 함수 NewDirectByteBuffer을 살펴보면 C 포인터를 사용하여 에 필요한 버퍼 인 ByteBuffer을 만듭니다.

가 지금은 분명해진다, 당신은 단지 필요 :

  • 는 JNI 코드
  • 패스 /와 픽셀 버퍼로 ByteBuffer을 만들기 ByteBuffer 자바 땅
  • ByteBufferBitmap을 채우 돌아갑니다.
  • ImageView 또는 페인트 루틴으로 표시하십시오.

P. 그것은 OP 친화적 인 개체 참조를 처리하기 위해 소비가 남았습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. Void *는 JPEG 데이터 인 cpp 레이어에서 반환되며이 이미지 데이터는 Jni를 통해 Java 레이어에 필요합니다. – iGo

+1

자바는 void *를 처리하지 않습니다. 가장 가까운 것은 포인터 주소를 유지하기위한 긴 정수입니다. 그러나 엄밀히 말하면 UD입니다. 위의 제안은 Java에 ByteBuffer를 전달하고 자바 측에서 Bitmap을 만드는 것입니다. JNI로 Java 객체 메서드를 많이 호출하는 Bitmap을 만드는 것보다 덜 혼란 스럽습니다. –

+0

ByteBuffer를 Jni에서 자바 측으로 반환하는 경우 JNI 함수에 사용할 수있는 반환 유형의 유형. – iGo