Bitmap的一些操作

 这个不同于ImageView控件,这个不是控件,是画在画布上的,类要继承与View。将图片导入到res文件夹的三个文件下面。

得到资源

    得到图片的方式为:

 
myPic1=((BitmapDrawable)getResources();
getDrawable(R.drawable.p1)).getBitmap();  

绘制图片

    在onDraw(Canvas canvas)方法中绘制图片,

    可以直接绘制:canvas.drawBitmap(myPic1, 0,0,null);

    第一个参数是图画资源

    后两个是在屏幕上的坐标,应该是左上角的坐标


图片的缩放

public void drawBitmap(Bitmapbitmap, Rect src, Rect dst,Paint paint)

    第一个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) 区域。 

  =====》
    2 通过Matrix实现缩放效果

     具体实现跟下面的图片旋转的实现方式一样,只是用了Matrix的另一个方法,

    public void setScale (float sx, float sy)

    只需将下面旋转效果的代码中setRotate()方法替换为

//设置缩放
matrix.setScale(scale, scale);

    其中scale为定义的缩放倍率:float scale = 1.0f;调节这个参数的大小就可以实现缩放。 用这个方法会构造新的Bitmap,会消耗内存,所以效率没有上面第一种方法的高。

图片的旋转

    需要使用Matrix,他包含3*3的矩阵,专门用于图像变换匹配,必须被初始化,通过reset方法实现。通过setRotate设置旋转的角度,然后通过createBitmap()创建一个经过旋转等处理的Bitmap对象,然后将Bitmap画到屏幕上即实现了旋转效果

[java]
  1. protected void onDraw(Canvas canvas)  
  2. {  
  3.     super.onDraw(canvas);  
  4.   
  5.     //重置Matrix对象   
  6.     matrix.reset();  
  7.   
  8.     //设置旋转   
  9.     matrix.setRotate(angle);  
  10.   
  11.     //按matrix的旋转构造新的bitmap   
  12.     Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);  
  13.   
  14.     //绘制旋转之后的图像   
  15.     canvas.drawBitmap(bitmap2,(320-bitmap.getWidth())/2,(430-bitmap.getHeight())/2, null);  
  16. }  

猜你喜欢

转载自runfeel.iteye.com/blog/1836535