Android图像处理(三)负片,怀旧,浮雕,灰度,圆角,油画和左右对称
2015-04-08 16:14
429 查看
最后一弹,共实现负片,怀旧,浮雕,灰度,圆角,油画和左右对称7种特效:
实现的ImageHelper如下:
<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">package</span> com.zms.imageprocess; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.Bitmap; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.BitmapFactory; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.Canvas; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.Color; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.ColorMatrix; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.ColorMatri 4000 xColorFilter; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.Matrix; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.Paint; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.PorterDuff; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.PorterDuffXfermode; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.Rect; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.graphics.RectF; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> java.util.Random; <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * Created by Administrator on 2015/4/1. */</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ImageHelper</span> {</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// hue-色相 saturation-饱和度 lum-亮度</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Bitmap <span class="hljs-title" style="box-sizing: border-box;">ImageEffect</span>(Bitmap bitmap, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span> hue, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span> saturation, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span> luminance) { Bitmap mBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Canvas(mBitmap); Paint paint = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Paint(Paint.ANTI_ALIAS_FLAG); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Hue-色相/色调</span> ColorMatrix hueMatrix = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ColorMatrix(); hueMatrix.setRotate(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, hue); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// RED</span> hueMatrix.setRotate(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, hue); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// GREEN</span> hueMatrix.setRotate(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>, hue); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// BLUE</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Saturation-饱和度</span> ColorMatrix saturationMatrix = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ColorMatrix(); saturationMatrix.setSaturation(saturation); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Luminance-亮度/明度</span> ColorMatrix luminanceMatrix = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ColorMatrix(); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// setScale(float rScale, float gScale, float bScale, float aScale)</span> luminanceMatrix.setScale(luminance, luminance, luminance, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>); ColorMatrix imageMatrix = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ColorMatrix(); imageMatrix.postConcat(hueMatrix); imageMatrix.postConcat(saturationMatrix); imageMatrix.postConcat(luminanceMatrix); paint.setColorFilter(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ColorMatrixColorFilter(imageMatrix)); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// drawBitmap(@NonNull Bitmap bitmap, float left, float top, @Nullable Paint paint)</span> canvas.drawBitmap(bitmap, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, paint); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> mBitmap; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Bitmap <span class="hljs-title" style="box-sizing: border-box;">handleImage</span>(Bitmap bm, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> effect) { Bitmap bitmap = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Bitmap.Config.ARGB_8888); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> width = bm.getWidth(); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> height = bm.getHeight(); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> color = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> r, g, b, a, r1, g1, b1; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>[] oldPx = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>[width * height]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>[] newPx = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>[width * height]; bm.getPixels(oldPx, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, width, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, width, height); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span> (effect) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>: <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 负片效果</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i < width * height; i++) { color = oldPx[i]; r = Color.red(color); g = Color.green(color); b = Color.blue(color); a = Color.alpha(color); r = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span> - r; g = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span> - g; b = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span> - b; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (r > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>) { r = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (r < <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) { r = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (g > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>) { g = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (g < <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) { g = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>) { b = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b < <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) { b = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; } newPx[i] = Color.argb(a, r, g, b); } bitmap.setPixels(newPx, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, width, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, width, height); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>: <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 怀旧效果</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i < width * height; i++) { color = oldPx[i]; a = Color.alpha(color); r = Color.red(color); g = Color.green(color); b = Color.blue(color); r1 = (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>) (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.393</span> * r + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.769</span> * g + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.189</span> * b); g1 = (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>) (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.349</span> * r + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.686</span> * g + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.168</span> * b); b1 = (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>) (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.272</span> * r + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.534</span> * g + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.131</span> * b); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (r1 > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>) { r1 = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (g1 > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>) { g1 = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b1 > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>) { b1 = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>; } newPx[i] = Color.argb(a, r1, g1, b1); } bitma f0f1 p.setPixels(newPx, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, width, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, width, height); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>: <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 浮雕效果</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> colorBefore = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; i < width * height; i++) { colorBefore = oldPx[i - <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>]; a = Color.alpha(colorBefore); r = Color.red(colorBefore); g = Color.green(colorBefore); b = Color.blue(colorBefore); color = oldPx[i]; r1 = Color.red(color); g1 = Color.green(color); b1 = Color.blue(color); r = (r - r1 + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">127</span>); g = (g - g1 + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">127</span>); b = (b - b1 + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">127</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (r > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>) { r = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (g > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>) { g = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>) { b = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>; } newPx[i] = Color.argb(a, r, g, b); } bitmap.setPixels(newPx, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, width, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, width, height); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>: <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 灰度</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> alpha = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xFF</span> << <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">24</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i < height; i++) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> j = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; j < width; j++) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> grey = oldPx[width * i + j]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> red = ((grey & <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00FF0000</span>) >> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> green = ((grey & <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000FF00</span>) >> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> blue = (grey & <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x000000FF</span>); grey = (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>) ((<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span>) red * <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.3</span> + (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span>) green * <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.59</span> + (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span>) blue * <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.11</span>); grey = alpha | (grey << <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>) | (grey << <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>) | grey; newPx[width * i + j] = grey; } } bitmap.setPixels(newPx, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, width, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, width, height); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>: <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 圆角</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> roundPx = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">55</span>; Canvas canvas = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Canvas(bitmap); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> colorRound = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0xff424242</span>; Paint paint = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Paint(); Rect rect = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Rect(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, bm.getWidth(), bm.getHeight()); RectF rectF = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> RectF(rect); paint.setAntiAlias(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>); canvas.drawARGB(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>); paint.setColor(colorRound); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bm, rect, rect, paint); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>: <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 油画</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> Radio = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; Random rnd = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Random(); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> iModel = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = width - iModel; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> (i > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> j = height - iModel; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> (j > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> iPos = rnd.nextInt(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>) % iModel; color = bm.getPixel(i + iPos, j + iPos); bitmap.setPixel(i, j, color); j = j - <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; } i = i - <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>: <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 左右对称</span> Canvas canvas2 = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Canvas(bitmap); canvas2.drawColor(Color.BLACK); canvas2.drawBitmap(bm, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>); Matrix matrix = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Matrix(); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">float</span>[] values = {-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>f, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0</span>f, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0</span>f, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0</span>f, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>f, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0</span>f, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0</span>f, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0</span>f, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1.0</span>f}; matrix.setValues(values); bitmap = Bitmap.createBitmap(bm, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, bm.getWidth(), bm.getHeight(), matrix, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>); canvas2.drawBitmap(bitmap, bm.getWidth(), <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>; } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> bitmap; } }</code>
相关文章推荐
- android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜
- android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
- android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
- Android 图像处理(浮雕、复古、怀旧等)
- 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
- 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
- Android图像处理(二)底片效果、怀旧效果、浮雕效果
- 图像滤镜处理算法:灰度、黑白、底片、浮雕
- Android 图像处理(类型转换,比例缩放,倒影,圆角)
- Android下常用的图像处理程序(灰度化、线性灰度变化、二值化)
- 在Android平台上利用opencv进行图像处理之边缘检测、灰度变换、缩小
- 图像处理软件开发记录(六) 图像特效(浮雕、怀旧)
- Android图像处理(2):怀旧效果
- Android 图像缩放,圆角处理
- Android 图像处理(类型转换,比例缩放,倒影,圆角)
- Android 图像处理(类型转换,比例缩放,倒影,圆角)
- Android ,Bitmap ,Drawable,图像缩放,圆角处理,倒影
- Android 图像处理(类型转换,比例缩放,倒影,圆角)
- Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等
- 图像滤镜处理算法:灰度、黑白、底片、浮雕