2

Bitmapネイティブ コードで何らかの操作を行う必要があります。具体的には、私の JNI セットアップは次のようなものです。

// pixels color array in ARGB_8888 format, returned by dependent library
char* pixels;
jobject bitmap = null /* what to put here */;
return bitmap;

指定された行に入力しBitmapて、 my で使用できるActivity pixels返し、後でNDK で を変更したときに、Bitmapここで返されたオブジェクトが再作成やデータ コピーなしで自動的に更新されるようにします。意図は、pixels何度も何度も更新されることです。http://developer.android.com/reference/android/graphics/Bitmap.htmlBitmap.createBitmapのようなメソッドを認識していますが、適用可能なメソッドは不変のビットマップを生成するようですが、可変ビットマップを生成するメソッドではピクセルを配置できませんデータ。

4

2 に答える 2

2

Bitmap.java私は Android のソース コード (およびその JNI 対応部分から) を掘り下げ、C++ クラスを見つけることができましたGraphicsJNI。適用方法は、

static SkBitmap* getNativeBitmap(JNIEnv*, jobject bitmap);

どうやら、それぞれBitmapがネイティブ C++ クラスへの参照を格納し、SkBitmapそのメソッドを対応するネイティブ クラスに単純に転送するだけです。SkBitmap外部ライブラリSkiaに属します。そのインターフェースから、setPixelsメソッドを目的に使用できます。したがって、解決策は次のとおりです。

#include <GraphicsJNI.h>
#include <SkBitmap.h>

char* pixels; // assume already exists
jobject bitmap; // construct an immutable bitmap in Java
SkBitmap* native_bitmap = GraphicsJNI::getNativeBitmap(env, bitmap);
native_bitmap->setPixels(pixels);

: このコードは、エミュレーターから取得できるlibandroid_runtime.soおよびとリンクする必要があります。libskia.soこれにより、コードはプラットフォームに依存します。

于 2013-11-12T12:44:08.673 に答える
0

NDK は、android Bitmapでネイティブに動作する特別な API を提供します。 http://mobilepearls.com/labs/native-android-api/#bitmapを参照してください。ビットマップは「不変」ですが、そのピクセルをロックして、受け取ったvoid*バッファーの内容を操作できます。準備ができたら、ビットマップをunlock()することを忘れないでください。

于 2013-11-12T09:46:12.813 に答える