zoukankan      html  css  js  c++  java
  • Bitmap的一些操作

    1、截取 Bitmap 的部分区域

    mBitmap = Bitmap.createBitmap(bmp, 100, 100, 120, 120); 

        这句代码从 bmp 的 (100,100) 处截取 120*120 像素区域放到新的 Bitmap 中。

    2、缩放一个 Bitmap

    可以用 Bitmap.createScaledBitmap() 方 法根据给定的 Bitmap 创建 一个新的,缩放后的 Bitmap 。

    Bitmap mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true); 

        其中 mScreenWidth 和 mScreenHeight 是屏幕的宽度和高度,这里就将 bmp 拉伸到整个屏幕。

        每次 createBitmap ,都会分配新的内存,带来资源的 消耗,所以用 Bitmap 的 createBitmap 虽然简单方便,但是不是最优方 法。介绍一个比较好点的方法,不用创建新的 Bitmap ,用 Canvas 在画的时候直接缩放或者剪切。

    canvas.drawBitmap(mBitmap, null, new Rect(0, 0, 200, 200), null); 

        这里的 Rect 对象表示一个矩形区域,从 (0,0) 到 (200,200) 之间的矩形区域。这段代码将把 mBitmap 缩放并绘制到屏幕上的(0,0) 到 (200,200) 之间的区域。这个方法还有第二个参数我给的是 null ,其实这个参数也是个 Rect 对象,表示源 Rect 。把图片的某个区域拿出来画到屏幕的指定区域,

    canvas.drawBitmap(mBitmap, new Rect(100, 100, 300, 300), new Rect(100, 100, 200, 200), null); 

        这里将 mBitmap 的 (100,100) 到 (300,300) 区域拿出来,自动缩放并画到屏幕的 (100,100) 到 (200,200) 区域。

    3、图片平均分割方法,将大图平均分割为N行N列,方便用户使用

    /*** 
    * 图片分割 

    * @param g 
    * :画布

    * @param paint 
    * :画笔

    * @param imgBit 
    * :图片

    * @param x 
    * :X轴起点坐标

    * @param y 
    * :Y轴起点坐标

    * @param w 
    * :单一图片的宽度

    * @param h 
    * :单一图片的高度

    * @param line 
    * :第几列

    * @param row 
    * :第几行

    */

    public final void cuteImage(Canvas g, Paint paint, Bitmap imgBit, int x, 
    int y, int w, int h, int line, int row) { 
    g.clipRect(x, y, x + w, h + y); 
    g.drawBitmap(imgBit, x – line * w, y – row * h, paint); 
    g.restore(); 
    }

    4、图片缩放,对当前图片进行缩放处理

    /*** 
    * 图片的缩放方法 
    *

    * @param bgimage 
    * :源图片资源

    * @param newWidth 
    * :缩放后宽度 
    * @param newHeight

    * :缩放后高度 
    * @return

    */

    public Bitmap zoomImage(Bitmap bgimage, int newWidth, int newHeight) {

    // 获取这个图片的宽和高

    int width = bgimage.getWidth(); 
    int height = bgimage.getHeight();

    // 创建操作图片用的matrix对象

    Matrix matrix = new Matrix();

    // 计算缩放率,新尺寸除原始尺寸

    float scaleWidth = ((float) newWidth) / width; 
    float scaleHeight = ((float) newHeight) / height;

    // 缩放图片动作

    matrix.postScale(scaleWidth, scaleHeight); 
    Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, width, height, 
    matrix, true); 
    return bitmap;

    }

    5、绘制带有边框的文字,一般在游戏中起文字的美化作用

    /***

    * 绘制带有边框的文字 

    * @param strMsg 
    * :绘制内容 
    * @param g 
    * :画布

    * @param paint 
    * :画笔

    * @param setx 
    * ::X轴起始坐标

    * @param sety 
    * :Y轴的起始坐标

    * @param fg 
    * :前景色

    * @param bg 
    * :背景色

    */

    public void drawText(String strMsg, Canvas g, Paint paint, int setx, 
    int sety, int fg, int bg) { 
    paint.setColor(bg); 
    g.drawText(strMsg, setx + 1, sety, paint); 
    g.drawText(strMsg, setx, sety – 1, paint); 
    g.drawText(strMsg, setx, sety + 1, paint); 
    g.drawText(strMsg, setx – 1, sety, paint); 
    paint.setColor(fg); 
    g.drawText(strMsg, setx, sety, paint); 
    g.restore();

    }

    6、Android 图片透明度处理代码

    /** 
    * 图片透明度处理 

    * @param sourceImg 
    * 原始图片 
    * @param number 
    * 透明度 
    * @return 
    */ 
    public static Bitmap setAlpha(Bitmap sourceImg, int number) { 
    int[] argb = new int[sourceImg.getWidth() * sourceImg.getHeight()]; 
    sourceImg.getPixels(argb, 0, sourceImg.getWidth(), 0, 0,sourceImg.getWidth(), sourceImg.getHeight());// 获得图片的ARGB值 
    number = number * 255 / 100; 
    for (int i = 0; i < argb.length; i++) { 
    argb = (number << 24) | (argb & 0×00FFFFFF);// 修改最高2位的值 

    sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg.getHeight(), Config.ARGB_8888);

    return sourceImg; 
    }

    7、图片翻转

    Resources res = this.getContext().getResources(); 
    img = BitmapFactory.decodeResource(res, R.drawable.slogo); 
    Matrix matrix = new Matrix(); 
    matrix.postRotate(90); /*翻转90*/ 
    int width = img.getWidth(); 
    int height = img.getHeight(); 
    r_img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);

  • 相关阅读:
    IIS7中启用JS的压缩
    .NET中使用WINDOWS API参数定义
    IE6下的JQUERY_FCK兼容问题
    移动native+HTML5混搭应用感受
    【翻译】Fixie.js——自动填充内容的插件
    JSON辅助格式化
    【记录】导致notifyDataSetChanged无效的一个错误
    【Perl】批量word和PPT文档转pdf
    【记录】有关parseInt的讨论
    手机滑动应用
  • 原文地址:https://www.cnblogs.com/dongweiq/p/4478712.html
Copyright © 2011-2022 走看看