您的位置:首页 > 编程语言 > C#

C#+arcengine修改栅格数据的像元值

2015-02-03 19:33 891 查看
c此文为修改栅格数据的像元值,本人未深入研究,具体可参照arcgis开发帮助文档或者http://blog.sina.com.cn/s/blog_84f7fbbb0101d49w.html,感谢博主

/// <summary>

/// 修改栅格数据像素值

/// </summary>

/// <param name="clipRasterPath">raster路径</param>

public void ChangePixelValue(string clipRasterPath)

{

//得到裁剪后的raster

IRaster raster=GetRaster(clipRasterPath);

IRaster2 raster2 =( IRaster2)raster;

// 指定像素块大小

IPnt pntBlock = new PntClass();

pntBlock.X = 1280;

pntBlock.Y = 1280;

//创建一个光标以给定像素块大小

IRasterCursor rasterCursor = raster2.CreateCursorEx(pntBlock);

//控制像素块级别的编辑操作

IRasterEdit rasterEdit = raster2 as IRasterEdit;

if (rasterEdit.CanEdit())

{

//得到一段光栅带

IRasterBandCollection bandCollection =( IRasterBandCollection)raster;

System.Array pixels;

IPnt pnt = null;

object value;

int bandCount = bandCollection.Count;

//创建像素块

IPixelBlock3 pixelBlock3 = null;

int blockWidth = 0;

int blockHeight = 0;

do

{

pixelBlock3 = rasterCursor.PixelBlock as IPixelBlock3;

blockWidth = pixelBlock3.Width;

blockHeight = pixelBlock3.Height;

for (int k = 0; k < bandCount; k++)

{

//指定平面的像素的数组

pixels = (System.Array)pixelBlock3.get_PixelData(k);

for (int i = 0; i < blockWidth; i++)

{

for (int j = 0; j < blockHeight; j++)

{

value = pixels.GetValue(i, j);

if (Convert.ToInt32(value) == 0)

{

pixels.SetValue(Convert.ToByte(50), i, j);

}

}

}

pixelBlock3.set_PixelData(k, pixels);

}

pnt = rasterCursor.TopLeft;

rasterEdit.Write(pnt, (IPixelBlock)pixelBlock3);

}

while (rasterCursor.Next());

System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: