基于C#的AE二次开发之影像数据的裁切(掩膜)

2023-10-25 17:50

本文主要是介绍基于C#的AE二次开发之影像数据的裁切(掩膜),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于C#的AE二次开发之影像数据的裁切(掩膜)

我的开发环境为ArcGIS Engine 10.2与Visual studio2010,主地图名称为axMapControl1,如果变动则需要修改(注意相关事件的添加与动态链接库的引入)。

  • 效果预览
裁剪前
裁剪后

实现代码

  • 引用类库
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.ADF;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.GeoAnalyst;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.SpatialAnalyst;
using ESRI.ArcGIS.Geometry;
  • 代码实现
private void 影像裁剪ToolStripMenuItem_Click(object sender, EventArgs e)
{if (axMapControl1.get_Layer(0) is IFeatureLayer && axMapControl1.get_Layer(1) is IRasterLayer){IFeatureLayer pFeatureLayer = axMapControl1.get_Layer(0) as IFeatureLayer;//输入裁剪矢量图层IRasterLayer pRasterLayer = axMapControl1.get_Layer(1) as IRasterLayer;//输入裁剪栅格图层IPolygon pPoly = pFeatureLayer.FeatureClass.GetFeature(0).Shape as IPolygon;//设置裁剪要素rasterClip(pRasterLayer, pPoly, "rasterClip0");//调用裁剪方法//强提醒,完成裁剪MessageBox.Show("裁剪完成!");}
}/// <summary>
/// 掩膜处理
/// </summary>
/// <param name="pRasterLayer">输入裁剪栅格图层</param>
/// <param name="clipGeo">输入裁剪矢量要素</param>
/// <param name="FileName">输出文件名称</param>
public void rasterClip(IRasterLayer pRasterLayer, IPolygon clipGeo, string FileName)
{IRaster pRaster = pRasterLayer.Raster;//获取栅格文件IRasterProps pProps = pRaster as IRasterProps;object cellSizeProvider = pProps.MeanCellSize().X;IGeoDataset pInputDataset = pRaster as IGeoDataset;IExtractionOp pExtractionOp = new RasterExtractionOp() as IExtractionOp;IRasterAnalysisEnvironment pRasterAnaEnvir = pExtractionOp as IRasterAnalysisEnvironment;pRasterAnaEnvir.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeProvider);object extentProvider = clipGeo.Envelope;//获取矢量图形范围object snapRasterData = Type.Missing;pRasterAnaEnvir.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extentProvider, ref snapRasterData);IGeoDataset pOutputDataset = pExtractionOp.Polygon(pInputDataset, clipGeo as IPolygon, true);IRaster clipRaster;  //裁切后得到的IRasterif (pOutputDataset is IRasterLayer){IRasterLayer rasterLayer = pOutputDataset as IRasterLayer;clipRaster = rasterLayer.Raster;}else if (pOutputDataset is IRasterDataset){IRasterDataset rasterDataset = pOutputDataset as IRasterDataset;clipRaster = rasterDataset.CreateDefaultRaster();}else if (pOutputDataset is IRaster){clipRaster = pOutputDataset as IRaster;}else{return;}//保存裁切后得到的clipRaster,直接保存为tif影像文件IWorkspaceFactory pWKSF = new RasterWorkspaceFactory();//保存裁剪后的影像到本地路径下string filepath = @"c:\dat\";//判断文件夹是否存在,如果不存在新建文件夹if (false == System.IO.Directory.Exists(filepath)){//创建文件夹Directory.CreateDirectory(filepath);}IWorkspace pWorkspace = pWKSF.OpenFromFile(filepath, 0);ISaveAs pSaveAs = clipRaster as ISaveAs;//输出要素类的名称,文件后缀可以设置pSaveAs.SaveAs(FileName+".tif", pWorkspace, "TIFF");
}
  • 导出图像格式
格式名称字符串引用
Imagine"IMAGINE Image"
TIFF"TIFF"
GRID"GRID"
JPEG"JPG"
JP2000"JP2"
BMP"BMP"
PNG"PNG"
GIF"GIF"
PCI Raster"PIX"
X11 Pixmap"XPM"
PCRaster"MAP"
Memory Raster"MEM"
HDF4"HDF4"
BIL"BIL"
BIP"BIP"
BSQ"BSQ"
Idrisi Raster Format"RST"
ENVI Raster Format"ENVI"
Geodatabase Raster"GDB"

这篇关于基于C#的AE二次开发之影像数据的裁切(掩膜)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/284211

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因