Region区域
来源:互联网 发布:知乎如何玩 编辑:程序博客网 时间:2024/05/16 15:02
概述
Region是绘制中的区域的意思。使用Region可以对图形有很多操作,比如区域的合并,取交集,取抑或等。
创建一个Region有如下的方法:
public Region() public Region(Region region) public Region(Rect r) public Region(int left, int top, int right, int bottom)
除了第一个方法是构建一个空的区域以后,可以看到2,3,4个方法都是需要传值的,根据值创建一个指定区域,其中3,4方法都是构建一个矩形。
除了以上方法,region还可以后期指定它所代表的区域:
public void setEmpty() //清空public boolean set(Region region) public boolean set(Rect r) public boolean set(int left, int top, int right, int bottom) public boolean setPath(Path path, Region clip)//将path和clip的两个区域取交集
其中set方法都是指定新的区域来代替Region对象原有的区域。
其实上诉操作以后,绘制图像的过程中,cavas中是没有直接绘制Region的方法的,要绘制指定的Region需要使用RegionIterator类来绘制,RegionIterator类看名字能看出来,是一个迭代器,它的作用主要是从指定的Region中获取rect,也就是矩形。
这里的思想是,任意指定Region的图形,都可以由若干个细分的矩形组成,从下面的图中可以看出这一点:
可以从上图看出,上图的圆形实际上是若干个矩形组成的,他们依次排列组成了圆形,因为这里画笔使用的style是stroke,所以看起来中间是空的,如果使用Fill风格,那么就会填充成实心圆形。
代码如下:
mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeWidth(3);Path path1 = new Path();path1.addCircle(500, 500, 300, Path.Direction.CW);Region region = new Region();region.setPath(path1, new Region(0, 0, 1000, 1000));//绘制RegionIterator iterator = new RegionIterator(region);Rect rect = new Rect();while (iterator.next(rect)) { canvas.drawRect(rect, mPaint);}
可以看到,ReginIterator类,一次取出构成区域的大小不同的矩形,然后由cavas绘制,从而构成了不同的图形。
常用方法
1 SetPath()
boolean setPath (Path path, Region clip)
setPath方法在前面的示例中使用过,该方法的作用是将path区域和clip区域取交集,这里就不再单独作图。
2 区域操作
public final boolean union(Rect r) public boolean op(Rect r, Op op) { public boolean op(int left, int top, int right, int bottom, Op op) public boolean op(Region region, Op op) public boolean op(Rect rect, Region region, Op op)
区域的操作有很多种,以上方法第一个union主要是取并集,后面的op方法的含义是operation,操作的意思,那么进行何种操作,则由方法中的op参数来决定,Op是一个枚举类,取值如下
DIFFERENCE(0), //取补集 INTERSECT(1), // 交集 UNION(2), //并集 XOR(3), //异并集 REVERSE_DIFFERENCE(4), //反转补集 REPLACE(5); //后者区域替代前者
下面看效果图:次序按以上枚举次序
对应的代码如下
mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeWidth(1);Path path1 = new Path();Path path2 = new Path();path1.addCircle(500, 500, 300, Path.Direction.CW);path2.addCircle(500, 800, 300, Path.Direction.CW);mPaint.setColor(Color.RED);canvas.drawPath(path1,mPaint);canvas.drawPath(path2,mPaint);Region region = new Region();Region region2 = new Region();region.setPath(path1, new Region(0, 0, 1500, 1500));region2.setPath(path2, new Region(0, 0, 1500, 1500));region.op(region2, Region.Op.REPLACE);//绘制mPaint.setColor(Color.BLUE);mPaint.setStyle(Paint.Style.FILL);RegionIterator iterator = new RegionIterator(region);Rect rect = new Rect();while (iterator.next(rect)) { canvas.drawRect(rect, mPaint);}
- Region区域
- Region: 区域相差
- C++ GDI+ Region区域
- [LeetCode] surrounded region包围区域
- android Graphics:区域(Region)
- CSS3 区域模块 region相关编写示例
- ROI/Region of Interest感兴趣区域
- c#使用Region对图形区域构造和填充
- Drupal中添加自定义区域(Region)放置区块(Block)
- ZOJ 3659 Conquer a New Region【长春区域赛E】
- Drupal中添加自定义区域(Region)放置区块(Block)
- 利用区域协方差:Structure-Preserving Image Smoothing via Region Covariances
- 图像显著区域检测代码及其效果图 saliency region detection
- Halcon:获取Image图像中Region区域的特征参数
- 基于OpenCV实现的极值区域(Extremal Region)提取
- 自定义控件之绘图篇:区域(Region)
- (4.1.36.2)Graphics图形学解析补充篇:区域Region
- region
- eclipseEE 配置android 环境
- iOS quartzCore第七章—— CAScrollLayer的运用
- ORA-28040: No matching authentication protocol exception
- Activity是如何接收到touch事件的(窗口与用户输入系统)
- wget 文件下载
- Region区域
- lucene多线程并发的问题
- 位操作相关资料汇总
- 10分钟掌握XML、JSON及其解析
- Android 操作SQLite基本用法
- Android 开源项目分类汇总(上)
- 自定义ViewGroup打造微信朋友圈之九宫图效果
- yum安装日志
- Opensuse 改变Zotero默认的阅读器 default PDF reader