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