android图片处理技巧

package  com.img.util;

import  android.graphics.Bitmap;
import  android.graphics.Bitmap.Config;
import  android.graphics.Canvas;
import  android.graphics.LinearGradient;
import  android.graphics.Matrix;
import  android.graphics.Paint;
import  android.graphics.PixelFormat;
import  android.graphics.PorterDuff.Mode;
import  android.graphics.PorterDuffXfermode;
import  android.graphics.Rect;
import  android.graphics.RectF;
import  android.graphics.Shader.TileMode;
import  android.graphics.drawable.Drawable;

public   class  ImgUtil {
    
//  放大缩小图片
     public   static  Bitmap zoomBitmap(Bitmap bitmap,  int  w,  int  h) {
        
int  width  =  bitmap.getWidth();
        
int  height  =  bitmap.getHeight();
        Matrix matrix 
=   new  Matrix();
        
float  scaleWidth  =  (( float ) w  /  width);
        
float  scaleHeight  =  (( float ) h  /  height);
        matrix.postScale(scaleWidth, scaleHeight);
        Bitmap newBmp 
=  Bitmap.createBitmap(bitmap,  0 0 , width, height,
                matrix, 
true );
        
return  newBmp;
    }

    
//  将Drawable转化为Bitmap
     public   static  Bitmap drawableToBitmap(Drawable drawable) {
        
int  width  =  drawable.getIntrinsicWidth();
        
int  height  =  drawable.getIntrinsicHeight();
        Bitmap bitmap 
=  Bitmap.createBitmap(width, height, drawable
                .getOpacity() 
!=  PixelFormat.OPAQUE  ?  Bitmap.Config.ARGB_8888
                : Bitmap.Config.RGB_565);
        Canvas canvas 
=   new  Canvas(bitmap);
        drawable.setBounds(
0 0 , width, height);
        drawable.draw(canvas);
        
return  bitmap;
    }

    
//  圆角图片
     public   static  Bitmap getRoundedCornerBitmap(Bitmap bitmap,  float  roundPx) {
        Bitmap output 
=  Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Config.ARGB_8888);
        Canvas canvas 
=   new  Canvas(output);

        
final   int  color  =   0xff424242 ;
        
final  Paint paint  =   new  Paint();
        
final  Rect rect  =   new  Rect( 0 0 , bitmap.getWidth(), bitmap.getHeight());
        
final  RectF rectF  =   new  RectF(rect);

        paint.setAntiAlias(
true );
        canvas.drawARGB(
0 0 0 0 );
        paint.setColor(color);
        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

        paint.setXfermode(
new  PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);
        
return  output;
    }

    
//  获得带倒影的图片方法
     public   static  Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
        
final   int  reflectionGap  =   4 ;
        
int  width  =  bitmap.getWidth();
        
int  height  =  bitmap.getHeight();

        Matrix matrix 
=   new  Matrix();
        matrix.preScale(
1 - 1 );

        Bitmap reflectionImage 
=  Bitmap.createBitmap(bitmap,  0 , height  /   2 ,
                width, height 
/   2 , matrix,  false );

        Bitmap bitmapWithReflection 
=  Bitmap.createBitmap(width,
                (height 
+  height  /   2 ), Config.ARGB_8888);

        Canvas canvas 
=   new  Canvas(bitmapWithReflection);
        canvas.drawBitmap(bitmap, 
0 0 null );
        Paint deafalutPaint 
=   new  Paint();
        canvas.drawRect(
0 , height, width, height  +  reflectionGap, deafalutPaint);

        canvas.drawBitmap(reflectionImage, 
0 , height  +  reflectionGap,  null );

        Paint paint 
=   new  Paint();
        LinearGradient shader 
=   new  LinearGradient( 0 , bitmap.getHeight(),  0 ,
                bitmapWithReflection.getHeight() 
+  reflectionGap,  0x70ffffff ,
                
0x00ffffff , TileMode.CLAMP);
        paint.setShader(shader);
        
//  Set the Transfer mode to be porter duff and destination in
        paint.setXfermode( new  PorterDuffXfermode(Mode.DST_IN));
        
//  Draw a rectangle using the paint with our linear gradient
        canvas.drawRect( 0 , height, width, bitmapWithReflection.getHeight()
                
+  reflectionGap, paint);

        
return  bitmapWithReflection;
    }
}

 

 

package  com.img.util;

import  android.app.Activity;
import  android.graphics.Bitmap;
import  android.graphics.drawable.Drawable;
import  android.os.Bundle;
import  android.widget.ImageView;

public   class  MainActivity  extends  Activity {
    
private  ImageView mImageView01, mImageView02;

    @Override
    
public   void  onCreate(Bundle savedInstanceState) {
        
super .onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setupViews();
    }

    
private   void  setupViews() {
        mImageView01 
=  (ImageView) findViewById(R.id.image01);
        mImageView02 
=  (ImageView) findViewById(R.id.image02);

        
//  获取壁纸返回值是Drawable
        Drawable drawable  =  getWallpaper();
        
//  将Drawable转化为Bitmap
        Bitmap bitmap  =  ImgUtil.drawableToBitmap(drawable);
        
//  缩放图片
        Bitmap zoomBitmap  =  ImgUtil.zoomBitmap(bitmap,  100 100 );
        
//  获取圆角图片
        Bitmap roundBitmap  =  ImgUtil
                .getRoundedCornerBitmap(zoomBitmap, 
10.0f );
        
//  获取倒影图片
        Bitmap reflectBitmap  =  ImgUtil
                .createReflectionImageWithOrigin(zoomBitmap);
        
//  这里可以让Bitmap再转化为Drawable
        
//  Drawable roundDrawable = new BitmapDrawable(roundBitmap);
        
//  Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);
        
//  mImageView01.setBackgroundDrawable(roundDrawable);
        
//  mImageView02.setBackgroundDrawable(reflectDrawable);

        mImageView01.setImageBitmap(roundBitmap);
        mImageView02.setImageBitmap(reflectBitmap);
    }
}

你可能感兴趣的:(android,null,float,Matrix,shader,output)