您的位置:首页 > 其它

Bitmap的几种使用

2016-06-27 18:34 260 查看




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


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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: