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

来源:互联网 发布:js获取form表单数据 编辑:程序博客网 时间:2024/06/06 20:26
第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
204701_aa4q_195301.jpg 

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

001package com.android.tutor; 
002import android.graphics.Bitmap; 
003import android.graphics.Canvas; 
004import android.graphics.LinearGradient; 
005import android.graphics.Matrix; 
006import android.graphics.Paint; 
007import android.graphics.PixelFormat; 
008import android.graphics.PorterDuffXfermode; 
009import android.graphics.Rect; 
010import android.graphics.RectF; 
011import android.graphics.Bitmap.Config; 
012import android.graphics.PorterDuff.Mode; 
013import android.graphics.Shader.TileMode; 
014import android.graphics.drawable.Drawable; 
015public class ImageUtil { 
016       
017    //放大缩小图片  
018    public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){ 
019        int width = bitmap.getWidth(); 
020        int height = bitmap.getHeight(); 
021        Matrix matrix = new Matrix(); 
022        float scaleWidht = ((float)w / width); 
023        float scaleHeight = ((float)h / height); 
024        matrix.postScale(scaleWidht, scaleHeight); 
025        Bitmap newbmp = Bitmap.createBitmap(bitmap, 0,0, width, height, matrix, true); 
026        return newbmp; 
027    
028    //将Drawable转化为Bitmap  
029     public static Bitmap drawableToBitmap(Drawable drawable){ 
030            int width = drawable.getIntrinsicWidth(); 
031            int height = 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 = new Canvas(bitmap); 
036            drawable.setBounds(0,0,width,height); 
037            drawable.draw(canvas); 
038            return bitmap; 
039               
040        
041        
042     //获得圆角图片的方法  
043    public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){ 
044           
045        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap 
046                .getHeight(), Config.ARGB_8888); 
047        Canvas canvas = new Canvas(output); 
048    
049        final int color = 0xff424242
050        final Paint paint = new Paint(); 
051        final Rect rect = new Rect(0,0, bitmap.getWidth(), bitmap.getHeight()); 
052        final RectF rectF = new RectF(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(new PorterDuffXfermode(Mode.SRC_IN)); 
060        canvas.drawBitmap(bitmap, rect, rect, paint); 
061    
062        return output; 
063    
064    //获得带倒影的图片方法  
065    public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){ 
066        final int reflectionGap = 4
067        int width = bitmap.getWidth(); 
068        int height = bitmap.getHeight(); 
069           
070        Matrix matrix = new Matrix(); 
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 = new Canvas(bitmapWithReflection); 
079        canvas.drawBitmap(bitmap,0,0,null); 
080        Paint deafalutPaint = new Paint(); 
081        canvas.drawRect(0, height,width,height + reflectionGap, 
082                deafalutPaint); 
083           
084        canvas.drawBitmap(reflectionImage,0, height + reflectionGap, null); 
085           
086        Paint paint = new Paint(); 
087        LinearGradient shader = new LinearGradient(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(new PorterDuffXfermode(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        return bitmapWithReflection; 
098    
099       
100}
第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:
1<!--?xml version="1.0" encoding="utf-8"?-->   
2      
第四步:修改主核心程序,ImageDemo.java,代码如下:
01package com.android.tutor; 
02import android.app.Activity; 
03import android.graphics.Bitmap; 
04import android.graphics.drawable.Drawable; 
05import android.os.Bundle; 
06import android.widget.ImageView; 
07public class Imagedemoextends Activity { 
08    private ImageView mImageView01,mImageView02; 
09       
10    public void onCreate(Bundle savedInstanceState) { 
11        super.onCreate(savedInstanceState); 
12        setContentView(R.layout.main); 
13        setupViews(); 
14    
15      
16    private void setupViews(){ 
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 几种图像特效处理的集锦