Cropping and saving image data (source code)

Source: Internet
Author: User

Cropping and saving image data (source code)

Because the problem has been solved, the Code is now organized for everyone.

Image Data cropping I am referring to the scrsgjh post (vb code), original post address http://bbs.esrichina-bj.cn/ESRI/viewthread.php?
Tid = 4152 & highlight = % B6 % E0 % B1 % DF % D0 % CE % 2 Bscrsgjh

// Crop images
IGeometry clipGeo = axMapControl1.TrackPolygon ();//
ILayer layer = axMapControl1.get _ Layer (I); // The image layer to crop
IRasterLayer pRasterLayer = layer as IRasterLayer;
IRaster pRaster = pRasterLayer. Raster;
IRasterProps pProps = pRaster as IRasterProps;
Object cellSizeProvider = pProps. MeanCellSize (). X;
IGeoDataset pInputDataset = pRaster as IGeoDataset;
IExtractionOp pExtractionOp = new RasterExtractionOpClass ();
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 ipolympus Gon, true );
IRaster clipRaster; // IRaster obtained after Cropping
If (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;
}

// Save the clipRaster after cropping.

// If the image is saved as an img Image File
IWorkspaceFactory pWKSF = new RasterWorkspaceFactoryClass ();
IWorkspace pWorkspace = pWKSF. OpenFromFile (@ "C: \ temp", 0 );
ISaveAs pSaveAs = clipRaster as ISaveAs;
PSaveAs. SaveAs ("test. img", pWorkspace, "IMAGINE Image ");

// If it is stored in mdb
IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass ();
PRasterStorageDef. CompressionType = esriRasterCompressionType. esrirastercompression2000;
PRasterStorageDef. CompressionQuality = 50;
PRasterStorageDef. TileHeight = 128;
PRasterStorageDef. TileWidth = 128;
IWorkspaceFactory pWKSF = new AccessWorkspaceFactoryClass ();
IWorkspace pWorkspace = pWKSF. OpenFromFile (@ "C: \ temp \ test. mdb", 0 );
ISaveAs2 pSaveAs = clipRaster as ISaveAs2;
PSaveAs. SaveAsRasterDataset ("test", pWorkspace, "gdb", pRasterStorageDef );

// You can also use the IRasterWorkspaceEx SaveAsRasterDataset method to save the data to mdb.
IWorkspaceFactory pWKSF = new AccessWorkspaceFactoryClass ();
IWorkspace pWorkspace = pWKSF. OpenFromFile (@ "C: \ temp \ test. mdb", 0 );
IRasterWorkspaceEx pRasterWKS = pWorkspace as IRasterWorkspaceEx;
IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass ();
PRasterStorageDef. CompressionType = esriRasterCompressionType. esrirastercompression2000;
PRasterStorageDef. CompressionQuality = 50;
PRasterStorageDef. PyramidLevel = 2;
PRasterStorageDef. PyramidResampleType = rstResamplingTypes. RSP_BilinearInterpolation;
PRasterStorageDef. TileHeight = 128;
PRasterStorageDef. TileWidth = 128;
IRasterDef pRasterDef = new RasterDefClass ();
PRasterDef. Description = "rasterdataset ";
PRasterDef. SpatialReference = axMapControl1.SpatialReference;
IGeometryDef pGeoDef = new GeometryDefClass ();
IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit;
PGeoDefEdit. GeometryType_2 = esriGeometryType. esriGeometryPolygon;
PGeoDefEdit. AvgNumPoints_2 = 4;
PGeoDefEdit. GridCount_2 = 1;
PGeoDefEdit. set_GridSize (0, 1000 );
PGeoDefEdit. SpatialReference_2 = axMapControl1.SpatialReference;
IRasterDataset pRasterDataset = pRasterWKS. SaveAsRasterDataset ("test", clipRaster, pRasterStorageDef, "", pRasterDef,
PGeoDef );
// You do not need to set the parameters:
IRasterDataset pRasterDataset = pRasterWKS. SaveAsRasterDataset ("test", clipRaster, null, "", null, null );

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.