Android画图之Bitmap

Android画图之Bitmap(一)

把一个 Bitmap 画到 View 上,必须用到的类有 android.graphics.Canvas, android.graphics.Bitmap 。方法很简单,在 View 里面,重载 onDraw(Canvas canvas) 方法,然后用 canvas.drawBitmap() 方法,将其画在屏幕上。

public class MyView extends View {
	
	private Bitmap mBitmap;
	
	public MyView(Context context) {
		super(context);
		initialize();
	}

	private void initialize() {
		
		Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();
		
		mBitmap = bmp;
		
	}
	
	@Override protected void onDraw(Canvas canvas) {
//		super.onDraw(canvas);  //当然,如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。
		canvas.drawBitmap(mBitmap, 0, 0, null);
	}
}
结果:

结果

原图:

原图


然这仅仅只是第一步,但是很鼓舞人心呢,呵呵。

上面是直接将原图画在屏幕上,没有任何处理,因为图片比屏幕大,所以超出的部分看不到。我们试着将图片拉伸以填满整个屏幕。

public class MyView extends View {
	
	private Bitmap mBitmap;
	private Matrix mMatrix = new Matrix();
	
	private static int mScreenWidth;
	private static int mScreenHeight;
	
	public MyView(Context context) {
		super(context);
		initialize();
	}

	private void initialize() {
		DisplayMetrics dm = getResources().getDisplayMetrics();
		mScreenWidth = dm.widthPixels;
		mScreenHeight = dm.heightPixels;
		
		Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();
		mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true);		
	}
	
	@Override protected void onDraw(Canvas canvas) {
//		super.onDraw(canvas);  //当然,如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。
		canvas.drawBitmap(mBitmap, 0, 0, null);
	}
}


显示结果:

充满屏幕

下面一篇将介绍对Bitmap的一些操作。

Android画图之Bitmap(二)

Android画图之Bitmap(一) 介绍了简单的把 Bitmap 画到屏幕上,以及缩放 Bitmap 以铺满屏幕。对 Bitmap 的操作还有很多。比如截取 Bitmap 的部分区域,可以使用

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



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

缩放一个 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) 之间的区域。

Android画图之Bitmap

个方法还有第二个参数我给的是 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) 区域。

Android画图之Bitmap

对于 Bitmap 的处理,上面介绍的 是最简单的两种,平移和缩放。而要是需要更复杂的处理,比如旋转和倾斜,就得使用 Matrix 了。下面几篇将介绍 Matrix 在画图中的使用。


你可能感兴趣的:(Android画图之Bitmap)