图片打开放缩操作

打开image
 1.InputStream inputStream = context.getResources()  
2.                                .getAssets().open("image/" + url);  
3. bitmap = BitmapFactory.decodeStream(inputStream); 
   也可以这样:bmp=BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher);            
   在canvas上画画的步骤              
    canvas=holder.lockCanvas();
  canvas.drawColor(Color.BLUE);
  canvas.drawBitmap(bmp, 0,0, paint);
  holder.unlockCanvasAndPost(canvas);
  
78 ColorMatrix cm = new ColorMatrix();
79 //设置颜色矩阵
80 cm.set(array); array是一个4X5矩阵
第一行决定红色第二行决定绿色
第三行决定蓝色,第四行决定了透明度,第五列是颜色的偏移量
81 //颜色滤镜,将颜色矩阵应用于图片
82 paint.setColorFilter(new ColorMatrixColorFilter(cm));
83 //绘图
   
  Matrix类,Matrix是一个3 x 3的矩阵 :
 Matrix cm = new Matrix();
80//为坐标变换矩阵设置响应的值
81 cm.setValues(array);
82//按照坐标变换矩阵的描述绘图
83 canvas.drawBitmap(mBitmap, cm, paint);

实际上,matrix类本身已经提供了许多类似的方法
  1、Translate————平移变换 maMiX.setTranslate(dx, dy) 表示在每个轴上移动的数量
2、Scale————缩放变换 maMiX.setScale(sx, sy)
3、Rotate————旋转变换 maMiX.setRotate(degrees)
围绕默认点(0,0),正数将顺时针旋转图像,而负数将逆时针旋转图像,其中默认点是图像的左上角
也可以使用旋转的角度及围绕的旋转点作为参数调用setRotate方法。选择图像的中心点作为旋转点,如:
matrix.setRotate(15,bmp.getWidth()/2,bmp.getHeight()/2);

4、Skew————错切变换 maMiX.setSkew(kx, ky)
错切变换的效果就是让所有点的x坐标(或者y坐标)保持不变,而对应的y坐标(或者x坐标)则按比例发生平移,
且平移的大小和该点到x轴(或y轴)的垂直距离成正比。错切变换,属于等面积变换,即一个形状在错切变换的前后,其面积是相等的
  preTranslate是指在setScale前,平移。
  postTranslate是指在setScale后平移。
set(用于设置Matrix中的值)、post(后乘,根据矩阵的原理,相当于左乘)、
pre(先乘,相当于矩阵中的右乘)。默认时,这四种变换都是围绕(0,0)点变换的,
当然可以自定义围绕的中心点,通常围绕中心点。
例如:
3.m.postRotate(30);  
4. 
5.m.postTranslate(100, 100);   
和下面的效果等效
3.m.setTranslate(100, 100);  
4. 
5.m.preRotate(30); 

对于程序中,一个特别有用的方法对是setScale和postTranslate,它们允许跨单个轴(或者两个轴)翻转图像。如果以一个负数缩放,那么会将该图像绘制到坐标系统的负值空间。由于(0,0)点位于左上角,使用x轴上的负数会导致向左绘制图像。因此我们需要使用postTranslate方法,将图像向右移动,如:

matrix.setScale(-1, 1);
matrix.postTranslate(bmp.getWidth(),0);

可以在y轴上做同样的事情,翻转图像以使其倒置。通过将图像围绕两个轴上的中心点旋转180°,可以实现相同的效果,如
matrix.setScale(1, -1);
matrix.postTranslate(0, bmp.getHeight());

    //----------镜像反转位图(方式2)
   //X轴镜像
   canvas.drawBitmap(bmp, 0, 0, paint);
   Matrix maMiX = new Matrix();
   maMiX.postTranslate(100, 100);
   maMiX.postScale(-1, 1, 100 + bmp.getWidth() / 2, 100 + bmp.getHeight() / 2);
   canvas.drawBitmap(bmp, maMiX, paint);
   //Y轴镜像
   canvas.drawBitmap(bmp, 0, 0, paint);
   Matrix maMiY = new Matrix();
   maMiY.postTranslate(100, 100);
   maMiY.postScale(1, -1, 100 + bmp.getWidth() / 2, 100 + bmp.getHeight() / 2);
   canvas.drawBitmap(bmp, maMiY, paint);

你可能感兴趣的:(图片打开放缩操作)