#include <jni.h> #include <string> #include <android/bitmap.h> #include <cmath> #include <android/log.h> //定义TAG之后,我们可以在LogCat通过TAG过滤出NDK打印的日志 #define TAG "BitmapOperationNative" // 定义info信息 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG,__VA_ARGS__) void operationBitmap(JNIEnv *env, jobject bitmap, int srcColor, int dstColor) { int result; // 获取源Bitmap相关信息:宽、高等 AndroidBitmapInfo sourceInfo; result = AndroidBitmap_getInfo(env, bitmap, &sourceInfo); if (result < 0) { LOGI(" AndroidBitmap_getInfo result=%d ", result); return; } LOGI(" AndroidBitmapInfo format=%d srcColor=%x dstColor=%x", sourceInfo.format, srcColor, dstColor); // 获取源Bitmap像素数据 这里用的是32位的int类型 argb每个8位 uint32_t *sourceData; //锁定像素的地址(不锁定的话地址可能会发生改变) result = AndroidBitmap_lockPixels(env, bitmap, (void **) &sourceData); if (result < 0) { LOGI(" AndroidBitmap_lockPixels result=%d ", result); return; } // 遍历各个像素点 int color; int red, green, blue, alpha; int width = sourceInfo.width; int height = sourceInfo.height; int w, h; for (h = 0; h < height; h++) { for (w = 0; w < width; w++) { color = sourceData[h * width + w]; if (color == srcColor) { sourceData[h * width + w] = dstColor; } } } AndroidBitmap_unlockPixels(env, bitmap); } extern "C" JNIEXPORT void JNICALL Java_com_istep_bitmap_BitmapOperationNative_convertTo(JNIEnv *env, jclass clazz, jobject bitmap, jint src, jint dst) { operationBitmap(env, bitmap, src, dst); }
文章来源地址https://www.toymoban.com/news/detail-684828.html
文章来源:https://www.toymoban.com/news/detail-684828.html
到了这里,关于Android JNI Bitmap指定颜色值替换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!