文档章节

Bitmap的一些操作

wangbiglei
 wangbiglei
发布于 2015/09/26 10:27
字数 844
阅读 209
收藏 14

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);



本文转载自:http://www.cnblogs.com/GnagWang/archive/2011/06/28/2091980.html

wangbiglei

wangbiglei

粉丝 2
博文 22
码字总数 9573
作品 0
无锡
程序员
私信 提问
No.14 【大数据算法】BitMap的原理和实现

0x00 前言 本篇是大数据算法系列 第一篇《BitMap的原理和实现》,BitMap 的思想的和原理是很多算法的基础,因此我们以BitMap开篇。 既然是说大数据算法,我们先尝试给大数据算法一个定义,或...

dantezhao
2017/10/09
0
0
BitMap 的基本原理和实现

前言 文章是自己写了后先发到了公众号里,再转到了内部的KM。算是一个系列的学习笔记,一篇篇来。 本篇是大数据算法系列 第一篇《BitMap的原理和实现》,BitMap 的思想的和原理是很多算法的基...

大数据之路
2012/09/04
217
0
Android画图之Bitmap

Android画图之Bitmap(一) 要把一个 Bitmap 画到 View 上,必须用到的类有 android.graphics.Canvas, 和 android.graphics.Bitmap 。方法很简单,在 View 里面,重载 onDraw(Canvas canvas) ...

Jerikc
2014/04/12
678
0
Android高级模糊技术学习

Android高级模糊技术学习 2014-04-01 13:29 佚名 blog.jobbole 字号:T | T 今天我们来更深入了解一下Android开发上的模糊技术。我读过几篇有关的文章,也在StackOverFlow上看过一些相关教程...

Jonson
2014/05/15
1K
0
android.graphics.Camera实现图像的旋转、缩放,配合Matrix实现图像的倾斜

android.graphics.Camera可以对图像执行一些比较复杂的操作,诸如旋转与绽放,与Matrix可实现图像的倾斜。 个人总结Camera与Matrix的一些区别如下: Camera的rotate()相关方法是指定某一维度...

鉴客
2011/12/12
16.9K
3

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
今天
8
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
6
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
8
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
5
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部