IRasterStretch2接口的StretchStats属性的真实面目是什么
2013-11-18 17:27
260 查看
这个问题源于***RGB彩色合成图。仿照ArcMap中的做法,我们发现Arcmap中除了标准差拉伸、直方图均衡化、最大最小值拉伸、直方图匹配等既定的拉伸方法之外,还有最直接的自定义直方图拉伸。在我想实现这个功能的时候,发现最有可能与此相关的接口就是IRasterStretch2,其StretchStats和SpecificationHistogram应该就是与直方图相关的属性。经过测试,问题出现了:
当我们用ArcMap***好RGB合成图并用自己的程序加载地图后,发现StretchStats和SpecificationHistogram都是IArray类型的接口对象,经过转换,并且进一步探索,发现其元素是一个object类型的对象,其中obj1是null,而obj2有值,但是使用GetType()的得到的信息是System.__ComObject,这下就难住我们了,因为我们无法确认它的真实面目。经过网上搜索,发现这个问题在2011年就有人发过帖子,见:Geographic
Informathion System论坛,ESRI ArcGIS Resource论坛。
这两处,应该都是同一个人提的,他问的也是同样的问题:
并且比较糟糕的是居然没有任何答案。为了实现我的功能,就必须解决这个问题。首先我能确定的是,这个object肯定是一个对象,那么它究竟是什么呢?
在这里http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/d/000100000471000000.htm,我看到IArray是一个IAnimationTrack对象,而在http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/d/0001000002r6000000.htm处,我发现它是一个EnumGPNameClass对象,还有很多地方,都有IArray的身影,问题变得似乎复杂了.
既然这里的IArray与直方图有关,那么它肯定是一个键值对组合,最容易想到的是IUniqueValues,很不幸的是在即时窗口里的测试结果是false
无奈,只好试试其它的。于是我做了如下的测试:
ArcGIS Resource论坛里,我也留下了答案。
IRasterRGBRenderer2 m_pRasterRGBRenderer = pRasterLayer.Renderer as IRasterRGBRenderer2; IRasterStretch2 pRasterStretch2 = m_pRasterRGBRenderer as IRasterStretch2; IArray pArray = pRasterStretch2.SpecificationHistogram; IArray pArray2 = pRasterStretch2.StretchStats; object obj1 = pArray.get_Element(0); object obj2 = pArray2.get_Element(0);
当我们用ArcMap***好RGB合成图并用自己的程序加载地图后,发现StretchStats和SpecificationHistogram都是IArray类型的接口对象,经过转换,并且进一步探索,发现其元素是一个object类型的对象,其中obj1是null,而obj2有值,但是使用GetType()的得到的信息是System.__ComObject,这下就难住我们了,因为我们无法确认它的真实面目。经过网上搜索,发现这个问题在2011年就有人发过帖子,见:Geographic
Informathion System论坛,ESRI ArcGIS Resource论坛。
这两处,应该都是同一个人提的,他问的也是同样的问题:
IRasterStretch2 irs = irrgbr as IRasterStretch2; //irrgbr is of type IRasterRGBRenderer. IArray ia = irs.StretchStats; ISomething value = ia.get_Element(0) as ISomething; // What should "ISomething" be?
并且比较糟糕的是居然没有任何答案。为了实现我的功能,就必须解决这个问题。首先我能确定的是,这个object肯定是一个对象,那么它究竟是什么呢?
在这里http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/d/000100000471000000.htm,我看到IArray是一个IAnimationTrack对象,而在http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/d/0001000002r6000000.htm处,我发现它是一个EnumGPNameClass对象,还有很多地方,都有IArray的身影,问题变得似乎复杂了.
既然这里的IArray与直方图有关,那么它肯定是一个键值对组合,最容易想到的是IUniqueValues,很不幸的是在即时窗口里的测试结果是false
obj2 is ESRI.ArcGIS.DataSourcesRaster.IUniqueValues false
无奈,只好试试其它的。于是我做了如下的测试:
obj2 is ESRI.ArcGIS.DataSourcesRaster.IRaster2 false obj2 is ESRI.ArcGIS.DataSourcesRaster.IRasterBand false obj2 is ESRI.ArcGIS.DataSourcesRaster.IRasterBandCollection false obj2 is ESRI.ArcGIS.DataSourcesRaster.IRasterBandColormap false obj2 is ESRI.ArcGIS.DataSourcesRaster.IRasterCalcStatsHistogram false obj2 is ESRI.ArcGIS.DataSourcesRaster.IRasterCalcStatsHistogram2 false obj2 is ESRI.ArcGIS.DataSourcesRaster.IRasterCalcUniqueValues false obj2 is ESRI.ArcGIS.DataSourcesRaster.IStatsHistogram true测试的类型比我想象的要少,最初还想用反射来枚举AE中的所有类,以便探测其类型,没想到的是大概测试了十多个接口,敏感的我就定位到了统计相关的接口,并且找到了IStatsHistogram接口。没有让我失望,Is IStatsHistogram返回了true,这样问题就解决了。既然网上对于这个问题没有任何论述,我就在此罗嗦一下,撰文一篇,以期对后续遇到同样问题的人有所帮助。另外在ESRI
ArcGIS Resource论坛里,我也留下了答案。
相关文章推荐
- Selenium的一些帮助信息
- UILabel的一些自定义用法的总结
- .net System.Net.Mail 之用SmtpClient发送邮件 Demo
- org.springframework.beans.NotWritablePropertyException: Invalid property
- VS2010编译C程序
- html5画图
- poj 3253 Fence Repair
- Quartz实例及IIS闲置超时解决方案
- C#如何将byte[]写入文件的方法和注意的问题
- activemq5.9内部集成zookeeper支持故障转移,数据同步
- Jquery 插件开发公开属性顺序的影响.
- Linux目录同步rsync
- 怎么修改SQL2000数据库的sa密码
- mysql之innodb存储引擎特性汇总
- Android研究-Android的init启动到launcher启动-主要分析zygote服务
- 央视终于承认,转基因食物可能致癌!
- Oracle Fusion Overview
- 2013百度安卓巴士轻应用4城市巡展沙龙,免费报名啦
- 获取进程列表及相关信息
- 自己写的绑Hosts脚本