码迷,mamicode.com
首页 > 移动开发 > 详细

android中canvas的clipRect和concate调用顺序不同导致的图像效果不同。

时间:2017-08-19 20:03:59      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:变化   sans   img   source   rda   clip   track   actor   原因   

这几天一直弄关于Canvas方法调用顺序不同导致效果不一样的測试。

至于原理,我的canvas和Matrix之间的关系能够看到原因。还是就是每一个人要多去尝试,才干真正理解透彻。

接下来我解说一下第一张图五个标签的意义;

第一顺序图片是正常全屏显示在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调用顺序不同导致的图像效果不同。

标签:变化   sans   img   source   rda   clip   track   actor   原因   

原文地址:http://www.cnblogs.com/ljbguanli/p/7397554.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!