编辑栅格像素值的问题
for (int i = 0; i < blockheight; i++)
for (int j = 0; j < blockwidth; j++)
if (values[top + i, left + j] != noDataValue)
pixels.SetValue(Convert.ToByte(values[top + i, left + j]), j, i);
以上是正确写法,如果出现类似下面的错误,一、检查width 和 height是否交换了位置。二、在写入时不要忘记Convert.ToByte(),即将你要修改成的数据值转换成byte类型。
pRasterProps.NoDataValue使用问题
目标:将栅格值提取到数组,并将其无值区域统一改成-9999.
思路:将值提取到数组之后,遍历数组,和pRasterProps.NoDataValue作比较看是否一样,一样将其值改为-9999.
问题:pRasterProps.NoDataValue无法直接比较
正确做法:
如果栅格看起来是整型,pRasterProps.NoDataValue里的值可能是byte、unshort或者是其他,根据情况用if语句进行判断,得到int型的NoData,再比较。
System.Type typeNo = pRasterProps.NoDataValue.GetType();
if (typeNo.Name == "Byte[]")
{
byte[] test = (byte[])pRasterProps.NoDataValue;
byte[] data = { test[0], (byte)0, (byte)0, (byte)0 };
NoData = System.BitConverter.ToInt32(data, 0);
}
else if (typeNo.Name == "UInt16[]")
{
ushort[] test = (ushort[])pRasterProps.NoDataValue;
NoData = test[0];
}
else
{
MessageBox.Show("还存在其他的无值类型!");
}
如果是浮点型,直接float就可以了
float[] test = (float[])pRasterProps.NoDataValue;
double NoData = Convert.ToDouble(test[0]);
ArcGIS遇到严重的应用程序错误
有的功能路径和名称不能有中文
网友评论