ArcEngine ISaveAs.SaveAs保存为多种格式栅格数据(IMG、TIFF、JPEG、JP2、BMP、GIF、PNG)

前两天利用ISaveAs实现了单张栅格影像的格式转换,具体见ArcEngine栅格数据格式转换(单张)。但是今天发现了一个问题,在保存为GIF格式时一直报错,用CanSaveAs测试了一下,显示GIF是可以支持的格式,具体是为什么出错我现在也没找到原因。不过今天用ISaveAs对多张栅格影像进行格式转换的保存时意外发现居然可以保存为GIF。所以我比较了一下两者的不同之处。

单张影像格式转换

IRasterLayer pRasterLayer = layer as IRasterLayer;     
IDataLayer pDataLayer = pRasterLayer as IDataLayer;
IRaster pRaster = pRasterLayer.Raster;
IWorkspaceFactory pWKSF = new RasterWorkspaceFactoryClass();
IWorkspace pWorkspace = pWKSF.OpenFromFile(Filepath, 0);
ISaveAs pSaveAs = pRaster as ISaveAs;
pSaveAs.SaveAs(System.IO.Path.GetFileName(pFileName)+"."+format, pWorkspace, format);

多张影像格式转换

IWorkspaceFactory pWKSF = new RasterWorkspaceFactoryClass();
IWorkspace saveWorkspace = pWKSF.OpenFromFile(pFilePath, 0);
IWorkspace pWorkspace = pWKSF.OpenFromFile(pPath, 0);
IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace;
IRasterDataset pRasterDataset;
for (int i = 0; i < allFileNames.Count; i++ )
{
    string pFileName = allFileNames[i];//完整路径名(含文件名和后缀名)
    string pName = System.IO.Path.GetFileName(pFileName);
    pRasterDataset = pRasterWorkspace.OpenRasterDataset(pName);
    IRaster pRaster = pRasterDataset.CreateDefaultRaster();
    ISaveAs pSaveAs = pRaster as ISaveAs; 
    pSaveAs.SaveAs(System.IO.Path.GetFileNameWithoutExtension(pFileName) + "." + format, saveWorkspace, format);
}

单张影像格式转换的实现思路是:首先获取图层,再转换为栅格图层,从而获取其中的栅格数据,最后对该栅格数据进行SaveAs为另一格式。

多张影响格式转换的实现思路是:创建工作空间和栅格数据集,从路径打开栅格文件到栅格数据集,然后再根据数据集创建栅格数据,最后同样使用SavaAs对栅格数据进行另一格式存储。

可以看到,上述两种转换都用到了SaveAs,而且都是SaveAs是直接对Raster进行操作的,区别在于:前者通过已存在图层获取Raster;后者通过创建RasterDataset打开栅格文件,再创建Raster。也就是说,Raster的来源是否经过了RasterDataset,这是我所能找到明显的区别。

通过查看SaveAs的定义:

IDataset SaveAs(string Name, IWorkspace Workspace, string Format);

SaveAs是定义为IDataset的,那么这是不是意味着如果没有经过Dataset这一过程,最后某些格式的栅格数据就不能成功转换呢?我也还在寻找答案。


更新:

刚刚打开代码发现自己被打脸了,昨天明明可以转换成为GIF格式的现在又出错了,我也不知道发生了什么。。。所以以上只能说明是两种Raster的获取方式不同,至于GIF为什么转换失败,暂时无解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值