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

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

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

第二步:新建一个.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 public classImageUtil { 
016        
017     //放大缩小图片  
018     public static Bitmap zoomBitmap(Bitmap bitmap,int w,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, 00, width, height, matrix, true); 
026         returnnewbmp; 
027     
028     //将Drawable转化为Bitmap  
029      public staticBitmap 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     public static Bitmap 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         final intcolor = 0xff424242
050         final Paint paint = newPaint(); 
051         final Rect rect = newRect(00, bitmap.getWidth(), bitmap.getHeight()); 
052         final RectF rectF = newRectF(rect); 
053     
054         paint.setAntiAlias(true); 
055         canvas.drawARGB(0000); 
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     public staticBitmap createReflectionImageWithOrigin(Bitmap bitmap){ 
066         final intreflectionGap = 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, 00null); 
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, 0x70ffffff0x00ffffff, 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 <?xml version="1.0"encoding="utf-8"?> 
02 <LinearLayout xmlns: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 public class Imagedemo extendsActivity { 
08     privateImageView mImageView01,mImageView02; 
09        
10     public voidonCreate(Bundle savedInstanceState) { 
11         super.onCreate(savedInstanceState); 
12         setContentView(R.layout.main); 
13         setupViews(); 
14     
15       
16     private voidsetupViews(){ 
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, 100100); 
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 }

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


OK大功告成了!!


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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值