Android进行九宫格缩放

Android进行九宫格缩放  

2012-04-22 21:50:32|  分类: Android |  标签: |字号 订阅

import android.R.integer;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Rect;

/**
 * 位图处理相关工具
 *
 * @author 李晨龙
 *
 */
public class BitmapUtil
{
    /**
     * @author 御风火狐
     *
     * 9宫格缩放,保持4个角不变形.进行整体缩放
     *
     * ******************************************************
     * *          1           *              2                *         3         *
     * ******************************************************
     * *          4           *              5                *         6         *
     * ******************************************************
     * *          7           *              8                *         9         *
     * ******************************************************
     * scale9grid用来设置5的矩形范围,将元数据切割成9宫格
     * 1,3,7,9保持原始比例不变形
     * 2,8进行水平缩放,垂直不缩放
     * 4,6进行垂直缩放,水平不缩放
     *
     * @param source
     * 要进行缩放的源数据
     * @param scale9grid
     * 中间矩形的对角坐标,left,top,right,bottom
     * @param width
     * 缩放后的宽
     * @param height
     * 缩放后的高
     * @return
     * 缩放后的bitmap
     */
    public static Bitmap scale9Grid(Bitmap source,Rect scale9grid,int width,int height)
    {
        Bitmap bmpres = Bitmap.createBitmap( width, height, Config.ARGB_8888 );
        Canvas canvas = new Canvas(bmpres);
        int sw = source.getWidth( );
        int sh = source.getHeight( );
        int leftW = scale9grid.left;
        int rightW = sw-scale9grid.right;
        int topH = scale9grid.top;
        int bottomH = sh - scale9grid.bottom;

        int scaleR = width - rightW;
        int scaleB = height - bottomH;
        
        canvas.drawBitmap( source, new Rect( 0, 0, leftW, topH ), new Rect( 0, 0, leftW, topH ), null );//左上角,不变形
        canvas.drawBitmap( source, new Rect( scale9grid.right,0,sw,topH), new Rect( scaleR, 0, width, topH ), null );//右上角,不变形
        canvas.drawBitmap( source, new Rect( 0,scale9grid.bottom,leftW,sh), new Rect( 0, scaleB, leftW, height ), null );//左下角,不变形
        canvas.drawBitmap( source, new Rect( scale9grid.right,scale9grid.bottom,sw,sh), new Rect( scaleR, scaleB, width, height ), null );//右下角,不变形
        canvas.drawBitmap( source, new Rect( leftW,0,scale9grid.right,topH), new Rect( leftW,0,scaleR,topH ), null );//上条矩形,水平缩放,垂直不缩放
        canvas.drawBitmap( source, new Rect( leftW,scale9grid.bottom,scale9grid.right,sh), new Rect( leftW,scaleB,scaleR,height ), null );//下条矩形,水平缩放,垂直不缩放
        canvas.drawBitmap( source, new Rect( 0,topH,leftW,scale9grid.bottom ), new Rect( 0,topH,leftW,scaleB ), null );//左条矩形,垂直缩放,水平不缩放
        canvas.drawBitmap( source, new Rect( scale9grid.right,topH,sw,scale9grid.bottom ), new Rect( scaleR,topH,width,scaleB ), null );//右条矩形,垂直缩放,水平不缩放
        canvas.drawBitmap( source, scale9grid, new Rect( scale9grid.left,scale9grid.top,scaleR,scaleB ), null );//中间矩形,水平垂直都缩放
        return  bmpres;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值