一个简单的改变图片效果的工具栏
public class ImageUtils {
/**
* 模糊效果
*
* @param bitmap
* @return
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public static Bitmap blurBitmap(Bitmap bitmap, Context context){
//Let's create an empty bitmap with the same size of the bitmap we want to blur
Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
//Instantiate a new Renderscript
RenderScript rs = RenderScript.create(context);
//Create an Intrinsic Blur Script using the Renderscript
ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
//Create the Allocations (in/out) with the Renderscript and the in/out bitmaps
Allocation allIn = Allocation.createFromBitmap(rs, bitmap);
Allocation allOut = Allocation.createFromBitmap(rs, outBitmap);
//Set the radius of the blur
blurScript.setRadius(25.f);
//Perform the Renderscript
blurScript.setInput(allIn);
blurScript.forEach(allOut);
//Copy the final bitmap created by the out Allocation to the outBitmap
allOut.copyTo(outBitmap);
//recycle the original bitmap
bitmap.recycle();
//After finishing everything, we destroy the Renderscript.
rs.destroy();
return outBitmap;
}
/**
* 改变色相、饱和度、亮度
*
* @param bitmap 原图
* @param rotate 色相
* @param saturation 饱和度
* @param scale 亮度
* @return
*/
public static Bitmap changePrimaryColor(Bitmap bitmap, float rotate, float saturation, float scale) {
//不能在原Bitmap上操作
Bitmap bmp = null;
bmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
//设置色相
ColorMatrix rotateMatrix = new ColorMatrix();
rotateMatrix.setRotate(0, rotate);
rotateMatrix.setRotate(1, rotate);
rotateMatrix.setRotate(2, rotate);
//设置饱和度
ColorMatrix saturationMatrix = new ColorMatrix();
saturationMatrix.setSaturation(saturation);
//设置亮度
ColorMatrix scaleMatrix = new ColorMatrix();
scaleMatrix.setScale(scale, scale, scale, 1);
ColorMatrix colorMatrix = new ColorMatrix();
//将三个colorMatrix混合
colorMatrix.postConcat(rotateMatrix);
colorMatrix.postConcat(saturationMatrix);
colorMatrix.postConcat(scaleMatrix);
Canvas canvas = new Canvas(bmp);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
canvas.drawBitmap(bitmap, 0, 0, paint);
return bmp;
}
public static Bitmap parseColorMatrix(Bitmap bitmap, float[] etValues) {
Bitmap bmp;
bmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
ColorMatrix colorMatrix = new ColorMatrix(etValues);
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
canvas.drawBitmap(bitmap, 0, 0, paint);
return bmp;
}
/**
* 负片效果
*
* @param bitmap
* @return
*/
public static Bitmap parseImageNegative(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int color;
int r, g, b, a;
Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
//旧的像素
int oldPixels[] = new int[width * height];
//新的像素
int newPixels[] = new int[width * height];
//给oldPixels赋值
bitmap.getPixels(oldPixels, 0, width, 0, 0, width, height);
//对每一个像素点处理
for (int i = 0; i < width * height; i++) {
color = oldPixels[i];
//将像素点颜色分解
r = Color.red(color);
g = Color.green(color);
b = Color.blue(color);
a = Color.alpha(color);
/ 处理 ///
r = 255 - r;
g = 255 - g;
b = 255 - b;
/
//保证在0-255
if (r > 255) {
r = 255;
} else if (r < 0) {
r = 0;
}
if (g > 255) {
g = 255;
} else if (g < 0) {
g = 0;
}
if (b > 255) {
b = 255;
} else if (b < 0) {
b = 0;
}
newPixels[i] = Color.argb(a, r, g, b);
}
bmp.setPixels(newPixels, 0, width, 0, 0, width, height);
return bmp;
}
/**
* 老照片效果
*
* @param bitmap
* @return
*/
public static Bitmap parseImageOldPhoto(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
int color;
int r, g, b, a, r1, g1, b1;
int oldPixels[] = new int[width * height];
int newPixels[] = new int[width * height];
bitmap.getPixels(oldPixels, 0, width, 0, 0, width, height);
for (int i = 0; i < width * height; i++) {
color = oldPixels[i];
r = Color.red(color);
g = Color.green(color);
b = Color.blue(color);
a = Color.alpha(color);
/ 处理 ///
r1 = (int) (0.393 * r + 0.769 * g + 0.189 * b);
g1 = (int) (0.349 * r + 0.686 * g + 0.168 * b);
b1 = (int) (0.272 * r + 0.534 * g + 0.131 * b);
if (r1 > 255) {
r1 = 255;
} else if (r1 < 0) {
r1 = 0;
}
if (g1 > 255) {
g1 = 255;
} else if (g1 < 0) {
g1 = 0;
}
if (b1 > 255) {
b1 = 255;
} else if (b1 < 0) {
b1 = 0;
}
newPixels[i] = Color.argb(a, r1, g1, b1);
}
bmp.setPixels(newPixels, 0, width, 0, 0, width, height);
return bmp;
}
/**
* 浮雕效果
*
* @param bitmap
* @return
*/
public static Bitmap parseImageRelief(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
int color,colorBefore;
int r, g, b, a, r1, g1, b1;
int oldPixels[] = new int[width * height];
int newPixels[] = new int[width * height];
bitmap.getPixels(oldPixels, 0, width, 0, 0, width, height);
for (int i = 1; i < width * height; i++) {
colorBefore = oldPixels[i - 1];
a = Color.alpha(colorBefore);
r = Color.red(colorBefore);
g = Color.green(colorBefore);
b = Color.blue(colorBefore);
color = oldPixels[i];
r1 = Color.red(color);
g1 = Color.green(color);
b1 = Color.blue(color);
r = (r - r1 + 127);
g = (g - g1 + 127);
b = (b - b1 + 127);
if (r > 255) {
r = 255;
} else if (r < 0) {
r = 0;
}
if (g > 255) {
g = 255;
} else if (g < 0) {
g = 0;
}
if (b > 255) {
b = 255;
} else if (b < 0) {
b = 0;
}
newPixels[i] = Color.argb(a, r, g, b);
}
bmp.setPixels(newPixels, 0, width, 0, 0, width, height);
return bmp;
}
}