标签:
这几天一直弄关于Canvas方法调用顺序不同导致效果不一样的测试,接下来我讲解一下第一张图五个标签的意义;
第一顺序图片是正常全屏显示在800*1280的手机上的。没有任务效果。不过原图是720*1280,所以为了满足手机的屏幕大小,他进行了等倍数的放大。
第二顺序图效果是进行PolyToPoly之后的图片,没有进行区域剪切。
第三顺序图是先剪切显示区域,然后PolyToPoly以后的图。
第四顺序图是只是剪切显示区域,没有polytopoly。
第五顺序图表示先polytopoly,然后剪切区域。
既然这样,那就谈谈自己对这样效果的看法,如果有什么不对的地方,网友可以留言给我。
第三顺序的图的源码是:
mBmp=BitmapFactory.decodeResource(getResources(), R.drawable.guide_page01);
canvas.save();
float src[]={0,0,getWidth(),0,getWidth(),getHeight(),0,getHeight()};
float sou[]={0,0,(float)(getWidth()),(float)(100),(float)(getWidth()),(float)(200),0,(float)(getHeight())};
m.setPolyToPoly(src, 0, sou, 0, src.length/2);
canvas.clipRect(getWidth()/2-getWidth()/6, getHeight()/2-getWidth()/6, getWidth()/2+getWidth()/6, getHeight()/2+getHeight()/6);
canvas.concat(m);
canvas.drawBitmap(mBmp,0,0,null);
super.onDraw(canvas);
canvas.restore();
表示的是,我已经剪切好要显示的区域,以后无论图片如何变化矩阵,我只是显示当前的区域。所以polytopoly虽然对全局进行了变化。但是显示区域还是一样不变。
第四顺序图的源码是:
mBmp=BitmapFactory.decodeResource(getResources(), R.drawable.guide_page01);
canvas.save();
float src[]={0,0,getWidth(),0,getWidth(),getHeight(),0,getHeight()};
float sou[]={0,0,(float)(getWidth()),(float)(100),(float)(getWidth()),(float)(200),0,(float)(getHeight())};
m.setPolyToPoly(src, 0, sou, 0, src.length/2);
canvas.clipRect(getWidth()/2-getWidth()/6, getHeight()/2-getWidth()/6, getWidth()/2+getWidth()/6, getHeight()/2+getHeight()/6);
//canvas.concat(m);
canvas.drawBitmap(mBmp,0,0,null);
super.onDraw(canvas);
canvas.restore();
表示除去polytopoly的矩阵变化。只是显示剪切区域的图片显示。
第五顺序图的源码是:
mBmp=BitmapFactory.decodeResource(getResources(), R.drawable.guide_page01);
canvas.save();
float src[]={0,0,getWidth(),0,getWidth(),getHeight(),0,getHeight()};
float sou[]={0,0,(float)(getWidth()),(float)(100),(float)(getWidth()),(float)(200),0,(float)(getHeight())};
m.setPolyToPoly(src, 0, sou, 0, src.length/2);
canvas.concat(m);
canvas.clipRect(getWidth()/2-getWidth()/6, getHeight()/2-getWidth()/6, getWidth()/2+getWidth()/6, getHeight()/2+getHeight()/6);
canvas.drawBitmap(mBmp,0,0,null);
super.onDraw(canvas);
canvas.restore();
他对第四顺序图的polytopoly矩阵变化。他表示的是,我想进行polytopoly矩阵变化,但是我想要看到的变换区域就只有我想要剪切的区域。所以就呈现如下第五顺序的效果。
从以上得出一个结论:polytopoly矩阵变换只对后面的图形剪切才有效。前面的剪切不会影响后面原图的变换。只是固定了显示区域。
版权声明:本文为博主原创文章,未经博主允许不得转载。
android中canvas的clipRect和concate调用顺序不同导致的图像效果不同。
标签:
原文地址:http://blog.csdn.net/linxingqianglai/article/details/47442021