Jak już zauważył Peter Lawrey, używanie obiektu innego niż Java nie jest możliwe, jednak możliwe jest bezpośrednie malowanie surowych danych z prostej tablicy bajtów Javy (dostęp do niej można uzyskać bezpośrednio po stronie C++).
Na koniec można nawet zadzwonić pod numer Canvas.drawBitmap(..), używając tej tablicy bajtów do namalowania utworzonego obrazu. Oczywiście to wymaga przechowywania obrazu na stronie C++ bezpośrednio w wymaganym formacie wewnątrz tablicy bajtów.
Java:
byte[] pixelBuf = new byte[bufSize];
następnie przekazać odwołanie do natywnej implementacji C++ byte[]
. Na C++ stronie można nazwać
C++:
jbyte* pixelBufPtr = env->GetByteArrayElements(pixelBuf, JNI_FALSE);
jsize pixelBufLen = env->GetArrayLength(env, pixelBuf);
// modify the data at pixelBufPtr with C++ functions
env->ReleaseByteArrayElements(pixelBuf, pixelBufPtr, 0);
Dziękuję za odpowiedź. Czy dobrze rozumiem, że tablica bajtów musi zostać całkowicie utworzona w języku Java, a następnie można uzyskać do niej dostęp i zmienić ją tylko w języku C++? – HardCoder
Tak, musisz utworzyć tablicę bajtów w Javie. Po stronie C++ można "zablokować" dane do uzyskania wskaźnika. Po odblokowaniu możesz go również użyć i zmienić w Javie. Zobacz moją zaktualizowaną odpowiedź. – Robert
"pixelBuf" jest typu "jbyteArray" .. – AnkitRox