【发布时间】:2019-12-18 22:52:51
【问题描述】:
以下脚本有未处理的异常。未处理的异常:System.ArgumentException:无法从源类型扩展到目标类型,因为源类型不是原始类型或无法完成转换。有人知道吗?我设置断点。这是 setvalue 行给我这个错误。但我不知道怎么了。
System.Array pixelDataO;
IPixelBlock3 pBlockO_3 = (IPixelBlock3)pBlockO;
pixelDataO = (System.Array)pBlockO_3.get_PixelData(0);
// Console.WriteLine(pixelDataO);
int maxy = -1;
Console.WriteLine("going rastermerge");
//loop through each pixel in the pixelblock and do calculation
for (int x = 0; x < pBlock1_3.Width; x++)
{
for (int y = 0; y < pBlock1_3.Height; y++)
{
// check to see if it's a valid data point
object oval1 = pBlock1_3.GetVal(0, x, y);
object oval2 = pBlock2_3.GetVal(0, x, y);
object oval3 =null;
if (oval1 != null && oval2 != null)
{
//Console.WriteLine(oval1);
int val1 = Convert.ToByte(oval1);
//Console.WriteLine("finish");
// set out of range values to 1
if (val1 < 1 || val1 > 5) val1 = 1;
// S5 must be coded as a 4
if (val1 == 5) val1 = 4;
int val2 = Convert.ToByte(oval2); ;
// int val3 = 10 * slval[val1] + val2;
int val3 = 10 * val1 + val2;
if (val3 > 10 && y > maxy) maxy = y;
oval3 = Convert.ToSByte(val3);
//Console.WriteLine(oval3);
}
Console.WriteLine(oval3);
pixelDataO.SetValue(oval3, x, y);
}
}
【问题讨论】:
-
您好,欢迎来到 SO!你有没有在你的代码中设置断点,错误出现在哪一行?
-
pixelDataO.SetValue(oval3, x, y);这行给了我错误。
-
你能检查一下
pixelDataO的类型吗,看起来你正在处理一个二维数组......所以这个定义应该类似于(byte[], int, int)。 -
是的,它是一个 System.SByte[,]
-
试试
oval3 = Convert.ToSByte(val3);,它将把它转换成一个8位有符号整数,而不是一个8位无符号整数... 8 位无符号转换为 8 位有符号,这不适合,因此,加宽错误。