ISaveAs将IDW插值后的栅格另存为tiff后,图片浏览器无法立即打开该.tif

Engine 10.2中,ISaveAs将IDW插值后的栅格另存为tiff后,该tif大小为1Kb,图片浏览器无法立即打开,需要等一会或者程序关闭后才能打开
已邀请:

朱新颖

赞同来自:

【解决办法】:
程序中对该栅格数据占用导致,需要将SaveAs方法返回的IDataset释放掉,添加代码System.Runtime.InteropServices.Marshal.FinalReleaseComObject(dataset); 即可。但在Engine 10.6中测试无此问题。



IWorkspaceFactory WF = new RasterWorkspaceFactoryClass(); 
IWorkspace workspace = WF.OpenFromFile(@D:\Demo\Data, 0); 
IFeatureLayer pFeatureLayer = axMapControl1.get_Layer(0) as IFeatureLayer; 
IInterpolationOp pInterpolationOp = new RasterInterpolationOpClass(); 
IGeoDataset pInputDataset = (IGeoDataset)pFeatureLayer.FeatureClass; 
IRasterRadius pRadius = new RasterRadiusClass(); 

object o1 = Type.Missing; 
pRadius.SetVariable(12, ref o1); 

IFeatureClassDescriptor pFCDescriptor = new FeatureClassDescriptor() as IFeatureClassDescriptor; 

pFCDescriptor.Create(pFeatureLayer.FeatureClass, null, Elevation); 

double dCellSize = 103.38;//像元大小 

object oCell = dCellSize; 

IRasterAnalysisEnvironment pEnv = (IRasterAnalysisEnvironment)pInterpolationOp; 

pEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref oCell); 

IRaster pOutRaster = null; 

object o2 = Type.Missing; 

pOutRaster = pInterpolationOp.IDW(pFCDescriptor as IGeoDataset, 2, pRadius, ref o2) as IRaster; 

ISaveAs saveAs = new RasterClass();
saveAs = pOutRaster as ISaveAs;
var dataset = saveAs.SaveAs(zxy.tif, workspace, TIFF);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(dataset);

要回复问题请先登录注册