CGSRegionRef如何将任意区域表示为矩形并集?解析调试输出格式
CGSRegionRef调试输出格式解析
CGSRegionRef是AppKit内部未公开的CFType类型,核心功能是将任意区域分解为矩形的并集。下面结合你提供的代码和输出,拆解其调试日志的含义:
测试代码
CGRect rect1 = CGRectMake(0, 0, 50, 10); CGRect rect2 = CGRectMake(0, 0, 5, 40); CGSRegionRef out1, out2, out3; CGSNewRegionWithRect(&rect1, &out1); CGSNewRegionWithRect(&rect2, &out2); CGSUnionRegion(out1, out2, &out3); NSLog(@"%@", out3);
输出结果
#<CGSRegion 0x600003950630 [0 0 50 40] 0 [0 50] 10 [0 5] 40 [] >
格式含义拆解
第一行
#<CGSRegion 0x600003950630 [0 0 50 40]>0x600003950630是该CGSRegion对象的内存地址[0 0 50 40]是区域的外接矩形(Bounding Box),即能完全包裹合并后区域的最小矩形,对应CGRectMake(0,0,50,40)
后续行是按y轴分段的扫描线记录,格式为
[y坐标] [x起始 x结束],表示在当前y坐标到下一行y坐标的区间内,x方向的有效区域:0 [0 50]:y从0到10的区间内,x的有效范围是0到50,对应原矩形rect1的区域10 [0 5]:y从10到40的区间内,x的有效范围是0到5,对应原矩形rect2在y>10的部分40 []:结束标记,表示y=40及以上没有有效区域
这种表示法本质是把区域拆分为多个水平矩形条带的并集,两个条带组合起来就是你合并后的区域:CGRectMake(0,0,50,10) + CGRectMake(0,10,5,30)。
内容的提问来源于stack exchange,提问作者1110101001
相关产品推荐
相关产品推荐

