之前在网上查找如何对图片进行打码操作,大多数的实现方式都是利用高斯模糊之类的方法来实现打码,最终在GPUImage里面找到了像素块那种形式的马赛克,不过GPUImage是用opengl实现的,因此在这里使用c来实现马赛克功能。
像素块马赛克的基本思想是一个大的马赛克像素块里面的颜色是一样的,比如在一个30*30的区域内,统一使用左上角的像素值来表示整个马赛克像素块的颜色值。
实现最终效果:
代码:
void mosaicBitmap(JNIEnv *env, jobject thiz, jobject bitmap,
jint width, jint height) {
char *destination = 0;
AndroidBitmap_lockPixels(env, bitmap, (void **) &destination);
unsigned int *dst2 = (unsigned int *) destination;
int pixel = 80; //控制像素块的大小
for (int i = 0; i < width; ++i) {
for (int j = 0; j < height; ++j) {
int colom = i / pixel;
int row = j / pixel;
dst2[j * width + i] = dst2[colom * pixel + row * pixel * width];
}
}
AndroidBitmap_unlockPixels(env, bitmap);
}