ArcEngine:栅格分级渲染
2015-11-05 11:01
405 查看
ArcEngine对矢量数据进行风格化实在是得心应手,同样的对于栅格图像也能进行风格化!以前没接触过,今天正好需要,做出了栅格图像的渲染!下面实现的思路:
1.定义渲染的一系列接口
2.判断图像是否建立了直方图,如果没有则进行创建。
3.定义颜色序列,为渲染提供渲染的方案。
4.调用Render方法进行渲染。
下面是代码:有两个方法,一个是加载栅格数据,一个是进行渲染,接着在事件里面调用方法,实现图像渲染!
///
/// 栅格分类专题图
///
/// 栅格图层
public static void funColorForRaster_Classify(IRasterLayer pRasterLayer)
{
IRasterClassifyColorRampRenderer pRClassRend = new RasterClassifyColorRampRenderer() as IRasterClassifyColorRampRenderer;
IRasterRenderer pRRend = pRClassRend as IRasterRenderer;
IRaster pRaster = pRasterLayer.Raster;
IRasterBandCollection pRBandCol = pRaster as IRasterBandCollection;
IRasterBand pRBand = pRBandCol.Item(0);
if (pRBand.Histogram == null)
{
pRBand.ComputeStatsAndHist();
}
pRRend.Raster = pRaster;
pRClassRend.ClassCount = 10;
pRRend.Update();
IRgbColor pFromColor = new RgbColor() as IRgbColor;
pFromColor.Red = 255;
pFromColor.Green = 0;
pFromColor.Blue = 0;
IRgbColor pToColor = new RgbColor() as IRgbColor;
pToColor.Red = 0;
pToColor.Green = 0;
pToColor.Blue = 255;
IAlgorithmicColorRamp colorRamp = new AlgorithmicColorRamp() as IAlgorithmicColorRamp;
colorRamp.Size = 10;
colorRamp.FromColor = pFromColor;
colorRamp.ToColor = pToColor;
bool createColorRamp;
colorRamp.CreateRamp(out createColorRamp);
IFillSymbol fillSymbol = new SimpleFillSymbol() as IFillSymbol;
for (int i = 0; i < pRClassRend.ClassCount; i++)
{
fillSymbol.Color = colorRamp.get_Color(i);
pRClassRend.set_Symbol(i, fillSymbol as ISymbol);
pRClassRend.set_Label(i, pRClassRend.get_Break(i).ToString("0.00"));
}
pRasterLayer.Renderer = pRRend;
}
///
/// 打开遥感图像
///
/// 图像的地址
/// IRasterLayer
private IRasterLayer OpenImage(string imagePath)
{
string ws = Path.GetDirectoryName(imagePath);
string fbs = Path.GetFileName(imagePath);
IWorkspaceFactory pWork = new RasterWorkspaceFactory();
IRasterWorkspace pRasterWs = pWork.OpenFromFile(ws,0) as IRasterWorkspace;
IRasterDataset pRasterDataset = pRasterWs.OpenRasterDataset(fbs);
IRasterLayer pRasterLayer = new RasterLayer() as IRasterLayer;
pRasterLayer.CreateFromDataset(pRasterDataset);
return pRasterLayer;
}
事件的逻辑:
axMapControl1.Map.AddLayer(OpenImage(filePath));
axMapControl1.ActiveView.Refresh();
funColorForRaster_Classify(axMapControl1.get_layer(0) as IRasterLayer);//only one RasterLayer
axMapControl1.Activeview.Refresh();
下面是渲染前后的效果图:
![](http://s13.sinaimg.cn/mw690/942ff76etdbfa3a47ae4c&690)
![](http://s5.sinaimg.cn/mw690/942ff76etdbfa3a64f6d4&690)
希望对大家有所帮助!
1.定义渲染的一系列接口
2.判断图像是否建立了直方图,如果没有则进行创建。
3.定义颜色序列,为渲染提供渲染的方案。
4.调用Render方法进行渲染。
下面是代码:有两个方法,一个是加载栅格数据,一个是进行渲染,接着在事件里面调用方法,实现图像渲染!
///
/// 栅格分类专题图
///
/// 栅格图层
public static void funColorForRaster_Classify(IRasterLayer pRasterLayer)
{
IRasterClassifyColorRampRenderer pRClassRend = new RasterClassifyColorRampRenderer() as IRasterClassifyColorRampRenderer;
IRasterRenderer pRRend = pRClassRend as IRasterRenderer;
IRaster pRaster = pRasterLayer.Raster;
IRasterBandCollection pRBandCol = pRaster as IRasterBandCollection;
IRasterBand pRBand = pRBandCol.Item(0);
if (pRBand.Histogram == null)
{
pRBand.ComputeStatsAndHist();
}
pRRend.Raster = pRaster;
pRClassRend.ClassCount = 10;
pRRend.Update();
IRgbColor pFromColor = new RgbColor() as IRgbColor;
pFromColor.Red = 255;
pFromColor.Green = 0;
pFromColor.Blue = 0;
IRgbColor pToColor = new RgbColor() as IRgbColor;
pToColor.Red = 0;
pToColor.Green = 0;
pToColor.Blue = 255;
IAlgorithmicColorRamp colorRamp = new AlgorithmicColorRamp() as IAlgorithmicColorRamp;
colorRamp.Size = 10;
colorRamp.FromColor = pFromColor;
colorRamp.ToColor = pToColor;
bool createColorRamp;
colorRamp.CreateRamp(out createColorRamp);
IFillSymbol fillSymbol = new SimpleFillSymbol() as IFillSymbol;
for (int i = 0; i < pRClassRend.ClassCount; i++)
{
fillSymbol.Color = colorRamp.get_Color(i);
pRClassRend.set_Symbol(i, fillSymbol as ISymbol);
pRClassRend.set_Label(i, pRClassRend.get_Break(i).ToString("0.00"));
}
pRasterLayer.Renderer = pRRend;
}
///
/// 打开遥感图像
///
/// 图像的地址
/// IRasterLayer
private IRasterLayer OpenImage(string imagePath)
{
string ws = Path.GetDirectoryName(imagePath);
string fbs = Path.GetFileName(imagePath);
IWorkspaceFactory pWork = new RasterWorkspaceFactory();
IRasterWorkspace pRasterWs = pWork.OpenFromFile(ws,0) as IRasterWorkspace;
IRasterDataset pRasterDataset = pRasterWs.OpenRasterDataset(fbs);
IRasterLayer pRasterLayer = new RasterLayer() as IRasterLayer;
pRasterLayer.CreateFromDataset(pRasterDataset);
return pRasterLayer;
}
事件的逻辑:
axMapControl1.Map.AddLayer(OpenImage(filePath));
axMapControl1.ActiveView.Refresh();
funColorForRaster_Classify(axMapControl1.get_layer(0) as IRasterLayer);//only one RasterLayer
axMapControl1.Activeview.Refresh();
下面是渲染前后的效果图:
希望对大家有所帮助!
相关文章推荐
- URAL 1534 Football in Gondor
- LP---精益生产(Lean Production)
- 如何在一个没有root权限的Android设备上创建一个SOCKS代理(英文转载)
- KNN的Python实现(需添加库numpy和operator)
- iOS ,呼叫捕获抛出勉未知方法的障碍
- 常喝这种水小心中毒
- 脚本判断访问终端是什么内核的浏览器
- AngularJS的directive(指令)配置选项说明
- Barcode Reader SDK使用教程:网络摄像机读取条码
- monkeyrunner自动化测试工具--UI元素获取
- 关于js返回按钮的问题
- JSON.parse( ) 和JSON.stringify( ) 的区别
- Python:构建缓冲带提取区域平均坡度
- angularjs 设置全局变量的3种方法
- debian开机启动管理
- 征服Redis系列
- Spring中的AOP—基于Annotation的配置方式
- leetcode-Balanced Binary Tree
- SQLMAP 实例COOKBOOK
- OpenGL ES 3.0之Shader and program(七)