#include #include #include #define LOG_TAG "lib_morefun" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) typedef struct { uint8_t alpha; uint8_t red; uint8_t green; uint8_t blue; } argb; JNIEXPORT void JNICALL Java_com_morefun_SysFont_convertToRGBA(JNIEnv* env, jclass clazz, jobject buffer, jint length) { void* pixels = env->GetDirectBufferAddress(buffer); unsigned char * p_argb = (unsigned char *)pixels; unsigned char a; for (int i = 0; i < length; i+=4) { a = p_argb[i]; p_argb[i ] = p_argb[i+1]; p_argb[i+1] = p_argb[i+2]; p_argb[i+2] = p_argb[i+3]; p_argb[i+3] = a; } } JNIEXPORT void JNICALL Java_com_morefun_SysFont_copyPixelsToBufferRGBA(JNIEnv* env, jclass clazz, jobject bitmap, jobject buffer) { AndroidBitmapInfo info_bitmap; int ret; void* pixelscolor; if ((ret = AndroidBitmap_getInfo(env, bitmap, &info_bitmap)) < 0) { LOGE("AndroidBitmap_getInfo() failed ! error=%d", ret); return; } if (info_bitmap.format != ANDROID_BITMAP_FORMAT_RGBA_8888) { LOGE("Bitmap format is not RGBA_8888 !"); return; } if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixelscolor)) < 0) { LOGE("AndroidBitmap_lockPixels() failed ! error=%d", ret); } { for (int y=0; y