Flex用GroupingCollection2建立tree的Hierarchy浅析

本文解决在Flex中使用GroupingCollection2构建树形结构时出现的末端节点显示问题。通过自定义label函数,成功实现了正确的节点标签展示。
最近一直在actionscript下写程序

碰到了要写tree的情况,后台阿三给的是flat XML数据,数据收到转换后我用arraycollection去存
要自己在arraycollection上建立Hirarchy,对tree又不是那么熟,查查各种资料。
发现GroupingCollection2是一个不错的东西,用了之后感觉不错,写下来
这个是来自adobe的例子[url=http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7bec.html]Displaying grouped data[/url],我参考的是actionscript版。

但是我遇到的问题是label显示的问题,当我group了2个以上的field之后
然后使用labelField="GroupLabel",结果是在最后一个结点也就是leaf的时候会出现[object someVo]问题。
即不能正常的显示出来,下面是主要部分code:


import mx.collections.GroupingField;
import mx.collections.Grouping;
import mx.collections.GroupingCollection2;
import mx.collections.ArrayCollection;

[Bindable]
public var myGColl:GroupingCollection2 = new GroupingCollection2();

private var myGrp:Grouping = new Grouping();

private function initDG():void {

//dpFlat是arraycollection数据
myGColl.source = dpFlat;

myGrp.fields = [new GroupingField("Initiative"), new GroupingField("Progrom")];

//使用GroupLabel显示label,很方便,
//但这样会出现末端结点的[object someVo]问题
myGrp.label = "GroupLabel";

myGColl.grouping = myGrp;

myADG.dataProvider = myGColl;

myGColl.refresh();

myTree.dataProvider = gc.getRoot();
}


乱试了很多别的都没办法解决,只能用labelfunction去弄了,为此来问了另一个阿三([url=http://manikmagar.wordpress.com/2011/08/21/flex-tree-and-groupingcollection/]他的blog[/url]), 惭愧, 下面是labelfunction的code:


private function myLabelFunction(item:Object):String{
if(item.hasOwnProperty('GroupLabel')){ // 这个判定重要
return item.GroupLabel;
} else if (item is TestItem){
return item.year;
} else {
return item.toString();
}


好了,搞定,本来这是给AdvanceDataGrid里tree用的,我这用来直接tree
不难,就是一种用法,当作第一篇。
OpenCV 中的 `cv2.findContours()` 函数用于从二值图像中检测轮廓。该函数返回两个主要输出:`contours` 和 `hierarchy`。其中,`contours` 是一个包含所有检测到的轮廓的列表,每个轮廓本身是一个点集;而 `hierarchy` 则描述了这些轮廓之间的层级关系[^1]。 ### 轮廓检测 轮廓检测的基本原理是找到图像中具有相同颜色或强度的连续点所形成的边界曲线。通常,这一过程是在二值图像上进行的,即图像中的像素要么是黑色(0),要么是白色(255)。通过调用 `cv2.findContours()` 函数,并传入适当的参数,可以提取出图像中的所有轮廓。例如: ```python contours, hierarchy = cv2.findContours(processed_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) ``` 在这个例子中,`processed_image` 是经过预处理得到的二值图像,`cv2.RETR_TREE` 指定了检索模式,表示检索所有的轮廓并重建完整的层级结构,而 `cv2.CHAIN_APPROX_SIMPLE` 表示压缩水平方向、垂直方向和对角线方向上的冗余点,只保留端点坐标[^2]。 ### 层级结构 在 OpenCV 中,`hierarchy` 是一个四维数组,每个元素对应一个轮廓的信息,具体包括 `[Next, Previous, First_Child, Parent]` 四个部分: - **Next**:同一层级中下一个轮廓的索引。 - **Previous**:同一层级中前一个轮廓的索引。 - **First_Child**:第一个子轮廓的索引。 - **Parent**:父轮廓的索引。 这种结构允许开发者理解不同轮廓之间的关系,比如哪些轮廓是其他轮廓的子轮廓,哪些是兄弟轮廓等。例如,在分析某个特定轮廓时,可以通过检查其 `hierarchy` 来确定它是否有父轮廓或子轮廓,从而更好地理解图像的结构[^3]。 ### 使用场景 轮廓检测及其层级结构的应用非常广泛,包括但不限于形状识别、物体检测、图像分割等领域。例如,在文档扫描应用中,可以通过检测纸张边缘的轮廓来裁剪和校正图像;在工业自动化中,轮廓检测可以帮助识别和定位生产线上的零件[^4]。 此外,对于复杂的图像,可能需要遍历所有检测到的轮廓以执行进一步的操作,如绘制轮廓、计算面积、周长等属性。这可以通过循环访问 `contours` 列表实现,每次处理一个轮廓。例如,若要单独处理第四个轮廓及其相关信息,可以这样做: ```python contnumber = 4 cnt = contours[contnumber] hier = hierarchy[0][contnumber] ``` 这样,`cnt` 变量将包含第四个轮廓的所有点,而 `hier` 将提供该轮廓的层级信息,便于后续处理[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值