Android 几种图像特效处理的集锦

第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
Android 几种图像特效处理的集锦

第二步.java文件ImageUtil.java,在里面定义一些图片处理方法<span color:#333333;"="" style="font-size: 10.5pt; ">,代码如下:

001 packagecom.android.tutor;
002 importandroid.graphics.Bitmap;
003 importandroid.graphics.Canvas;
004 importandroid.graphics.LinearGradient;
005 importandroid.graphics.Matrix;
006 importandroid.graphics.Paint;
007 importandroid.graphics.PixelFormat;
008 importandroid.graphics.PorterDuffXfermode;
009 importandroid.graphics.Rect;
010 importandroid.graphics.RectF;
011 importandroid.graphics.Bitmap.Config;
012 importandroid.graphics.PorterDuff.Mode;
013 importandroid.graphics.Shader.TileMode;
014 importandroid.graphics.drawable.Drawable;
015 publicclassImageUtil {
016
017 //放大缩小图片
018 publicstaticBitmap zoomBitmap(Bitmap bitmap,intw,inth){
019 intwidth = bitmap.getWidth();
020 intheight = bitmap.getHeight();
021 Matrix matrix = newMatrix();
022 floatscaleWidht = ((float)w / width);
023 floatscaleHeight = ((float)h / height);
024 matrix.postScale(scaleWidht, scaleHeight);
025 Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
026 returnnewbmp;
027 }
028 //将Drawable转化为Bitmap
029 publicstaticBitmap drawableToBitmap(Drawable drawable){
030 intwidth = drawable.getIntrinsicWidth();
031 intheight = drawable.getIntrinsicHeight();
032 Bitmap bitmap = Bitmap.createBitmap(width, height,
033 drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
034 : Bitmap.Config.RGB_565);
035 Canvas canvas = newCanvas(bitmap);
036 drawable.setBounds(0,0,width,height);
037 drawable.draw(canvas);
038 returnbitmap;
039
040 }
041
042 //获得圆角图片的方法
043 publicstaticBitmap getRoundedCornerBitmap(Bitmap bitmap,floatroundPx){
044
045 Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
046 .getHeight(), Config.ARGB_8888);
047 Canvas canvas = newCanvas(output);
048
049 finalintcolor = 0xff424242;
050 finalPaint paint = newPaint();
051 finalRect rect = newRect(0, 0, bitmap.getWidth(), bitmap.getHeight());
052 finalRectF rectF = newRectF(rect);
053
054 paint.setAntiAlias(true);
055 canvas.drawARGB(0, 0, 0, 0);
056 paint.setColor(color);
057 canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
058
059 paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
060 canvas.drawBitmap(bitmap, rect, rect, paint);
061
062 returnoutput;
063 }
064 //获得带倒影的图片方法
065 publicstaticBitmap createReflectionImageWithOrigin(Bitmap bitmap){
066 finalintreflectionGap = 4;
067 intwidth = bitmap.getWidth();
068 intheight = bitmap.getHeight();
069
070 Matrix matrix = newMatrix();
071 matrix.preScale(1, -1);
072
073 Bitmap reflectionImage = Bitmap.createBitmap(bitmap,
074 0, height/2, width, height/2, matrix, false);
075
076 Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);
077
078 Canvas canvas = newCanvas(bitmapWithReflection);
079 canvas.drawBitmap(bitmap, 0, 0, null);
080 Paint deafalutPaint = newPaint();
081 canvas.drawRect(0, height,width,height + reflectionGap,
082 deafalutPaint);
083
084 canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
085
086 Paint paint = newPaint();
087 LinearGradient shader = newLinearGradient(0,
088 bitmap.getHeight(), 0, bitmapWithReflection.getHeight()
089 + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
090 paint.setShader(shader);
091 // Set the Transfer mode to be porter duff and destination in
092 paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
093 // Draw a rectangle using the paint with our linear gradient
094 canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
095 + reflectionGap, paint);
096
097 returnbitmapWithReflection;
098 }
099
100 }
第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:
1 <!--?xml version="1.0" encoding="utf-8"?-->
2
第四步:修改主核心程序,ImageDemo.java,代码如下:
01 packagecom.android.tutor;
02 importandroid.app.Activity;
03 importandroid.graphics.Bitmap;
04 importandroid.graphics.drawable.Drawable;
05 importandroid.os.Bundle;
06 importandroid.widget.ImageView;
07 publicclassImagedemo extendsActivity {
08 privateImageView mImageView01,mImageView02;
09
10 publicvoidonCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.main);
13 setupViews();
14 }
15
16 privatevoidsetupViews(){
17 mImageView01 = (ImageView)findViewById(R.id.image01);
18 mImageView02 = (ImageView)findViewById(R.id.image02);
19
20 //获取壁纸返回值是Drawable
21 Drawable drawable = getWallpaper();
22 //将Drawable转化为Bitmap
23 Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);
24 //缩放图片
25 Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100);
26 //获取圆角图片
27 Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);
28 //获取倒影图片
29 Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);
30 //这里可以让Bitmap再转化为Drawable
31 // Drawable roundDrawable = new BitmapDrawable(roundBitmap);
32 // Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);
33 // mImageView01.setBackgroundDrawable(roundDrawable);
34 // mImageView02.setBackgroundDrawable(reflectDrawable);
35
36 mImageView01.setImageBitmap(roundBitmap);
37 mImageView02.setImageBitmap(reflectBitmap);
38 }
39
40
41 }

第五步:运行上述工程,查看效果如下:

Android 几种图像特效处理的集锦