package com.js.photosdk.filter; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; /** * * @author jarlen * * 使用: * * Filters filters = new Filters(bitmap,type); filters.process(factor); * */ public class Filters { private int filterType = 0; private int[] pixels; private NativeFilters nativeFilters; private int width, height; public Filters(Bitmap bitmap, int type) { this.filterType = type; nativeFilters = new NativeFilters(); width = bitmap.getWidth(); height = bitmap.getHeight(); pixels = new int[width * height]; bitmap.getPixels(pixels, 0, width, 0, 0, width, height); } /** * 执行滤镜操作 * * @param factor * (0 <= factor <= 1) * @return * * Bitmap */ public Bitmap process(float factor) { int[] newPixels = null; switch (filterType) { /* 黑白效果 */ case FilterType.FILTER4BlackWhite : newPixels = nativeFilters.ToBlackWhite(pixels, width, height, factor); break; /* 褐色效果 */ case FilterType.FILTER4BROWN : newPixels = nativeFilters .ToBrown(pixels, width, height, factor); break; /* 雕刻 */ case FilterType.FILTER4CARVING : newPixels = nativeFilters.ToCarving(pixels, width, height, factor); break; /* 连环画效果 */ case FilterType.FILTER4COMICS : newPixels = nativeFilters.ToComics(pixels, width, height, factor); break; /* 灰色 */ case FilterType.FILTER4GRAY : newPixels = nativeFilters.ToGray(pixels, width, height, factor); break; /* LOMO效果 */ case FilterType.FILTER4LOMO : newPixels = nativeFilters.ToLOMO(pixels, width, height, factor); break; /* 马赛克效果 */ case FilterType.FILTER4MOSATIC : int mosatic = (int) (factor * 30); newPixels = nativeFilters.ToMosatic(pixels, width, height, mosatic); break; /* 底片效果 */ case FilterType.FILTER4NEGATIVE : newPixels = nativeFilters.ToNegative(pixels, width, height, factor); break; /* 霓虹效果 */ case FilterType.FILTER4NiHong : newPixels = nativeFilters.ToNiHong(pixels, width, height, factor); break; /* 怀旧效果 */ case FilterType.FILTER4NOSTALGIC : newPixels = nativeFilters.ToNostalgic(pixels, width, height, factor); break; /* 过度曝光 */ case FilterType.FILTER4OVEREXPOSURE : newPixels = nativeFilters.ToOverExposure(pixels, width, height, factor); break; /* 浮雕效果 */ case FilterType.FILTER4RELIEF : newPixels = nativeFilters.ToRelief(pixels, width, height, factor); break; /* 锐化效果 */ case FilterType.FILTER4RUIHUA : newPixels = nativeFilters.ToRuiHua(pixels, width, height, factor); break; /* 素描 */ case FilterType.FILTER4SKETCH : newPixels = nativeFilters.ToSketch(pixels, width, height, factor); break; /* 铅笔画 */ case FilterType.FILTER4SKETCH_PENCIL : newPixels = nativeFilters.ToSketchPencil(pixels, width, height, factor); break; /* 柔化效果 */ case FilterType.FILTER4SOFTNESS : newPixels = nativeFilters.ToSoftness(pixels, width, height, factor); break; /* 亮白效果 */ case FilterType.FILTER4WHITELOG : newPixels = nativeFilters.ToWhiteLOG(pixels, width, height, FilterType.BeitaOfWhiteLOG, factor); break; default : newPixels = pixels; break; } Bitmap newBitmap = Bitmap.createBitmap(newPixels, width, height, Config.ARGB_8888); return newBitmap; } }