1#include <jni.h> 2#include <android/log.h> 3#include <android/bitmap.h> 4 5#include <stdio.h> 6#include <stdlib.h> 7#include <math.h> 8 9#include <RenderScript.h> 10 11#include "ScriptC_mono.h" 12 13#define LOG_TAG "HelloComputeNDK" 14#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) 15#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) 16 17using namespace android::RSC; 18 19extern "C" JNIEXPORT void JNICALL 20Java_com_example_android_rs_hellocomputendk_HelloComputeNDK_nativeMono(JNIEnv * env, 21 jclass, 22 jstring pathObj, 23 jint X, 24 jint Y, 25 jobject jbitmapIn, 26 jobject jbitmapOut 27 ) 28{ 29 30 void* inputPtr = NULL; 31 void* outputPtr = NULL; 32 33 AndroidBitmap_lockPixels(env, jbitmapIn, &inputPtr); 34 AndroidBitmap_lockPixels(env, jbitmapOut, &outputPtr); 35 36 const char * path = env->GetStringUTFChars(pathObj, NULL); 37 sp<RS> rs = new RS(); 38 rs->init(path); 39 env->ReleaseStringUTFChars(pathObj, path); 40 41 sp<const Element> e = Element::RGBA_8888(rs); 42 43 sp<const Type> t = Type::create(rs, e, X, Y, 0); 44 45 sp<Allocation> inputAlloc = Allocation::createTyped(rs, t, RS_ALLOCATION_MIPMAP_NONE, 46 RS_ALLOCATION_USAGE_SHARED | RS_ALLOCATION_USAGE_SCRIPT, 47 inputPtr); 48 sp<Allocation> outputAlloc = Allocation::createTyped(rs, t, RS_ALLOCATION_MIPMAP_NONE, 49 RS_ALLOCATION_USAGE_SHARED | RS_ALLOCATION_USAGE_SCRIPT, 50 outputPtr); 51 52 53 inputAlloc->copy2DRangeFrom(0, 0, X, Y, inputPtr); 54 ScriptC_mono* sc = new ScriptC_mono(rs); 55 sc->forEach_root(inputAlloc, outputAlloc); 56 outputAlloc->copy2DRangeTo(0, 0, X, Y, outputPtr); 57 58 59 AndroidBitmap_unlockPixels(env, jbitmapIn); 60 AndroidBitmap_unlockPixels(env, jbitmapOut); 61 62} 63