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

大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等.

废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来:
第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
Android 几种图像特效处理的集锦_第1张图片

第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如下:

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控件,代码如下:

01 xmlversion="1.0"encoding="utf-8"?>
02 <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
03 android:orientation="vertical"
04 android:layout_width="fill_parent"
05 android:layout_height="fill_parent"
06 >
07 <ImageView
08 android:id="@+id/image01"
09 android:layout_width="wrap_content"
10 android:layout_height="wrap_content"
11 android:padding="10px"
12 />
13 <ImageView
14 android:id="@+id/image02"
15 android:layout_width="wrap_content"
16 android:layout_height="wrap_content"
17 android:padding="10px"
18 />
19 LinearLayout>

第四步:修改主核心程序,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 publicclassImagedemoextendsActivity {
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 几种图像特效处理的集锦_第2张图片

OK大功告成了!!


注:本文来源于网络,具体出处无从考察。

你可能感兴趣的:(Android 几种图像特效处理的集锦)