Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理:参数超出范围?_C#_Outofrangeexception - Fatal编程技术网

C# 如何处理:参数超出范围?

C# 如何处理:参数超出范围?,c#,outofrangeexception,C#,Outofrangeexception,当我在picturebox中加载图片时,如果不先单击picturebox,图片会中断。 当我将返回放回代码中时,它将进入一个无止境的循环,当我删除它时,代码将中断 这是代码。它总是在第一点断裂,我不知道如何处理它 private void buttonNoiseAvr_Click(object sender, EventArgs e) { Point Zeko = new Point(25, 25); if (pictureBoxSourcePicture.Image == n

当我在picturebox中加载图片时,如果不先单击picturebox,图片会中断。 当我将返回放回代码中时,它将进入一个无止境的循环,当我删除它时,代码将中断

这是代码。它总是在第一点断裂,我不知道如何处理它

private void buttonNoiseAvr_Click(object sender, EventArgs e)
{
    Point Zeko = new Point(25, 25);

    if (pictureBoxSourcePicture.Image == null)
    {
        MessageBox.Show("No picture loaded");
        return;
    }

    if (pictureBoxSourcePicture.Height != clickedY || pictureBoxSourcePicture.Width != clickedX)
    {
        MessageBox.Show("Adeekll");
        //return;
    }

    Color oPoint = ((Bitmap)pictureBoxSourcePicture.Image).GetPixel(clickedX, clickedY);

    Color point1 = ((Bitmap)pictureBoxSourcePicture.Image).GetPixel(clickedX - 1, clickedY - 1);
    Color point2 = ((Bitmap)pictureBoxSourcePicture.Image).GetPixel(clickedX, clickedY - 1);
    Color point3 = ((Bitmap)pictureBoxSourcePicture.Image).GetPixel(clickedX + 1, clickedY - 1);
    Color point4 = ((Bitmap)pictureBoxSourcePicture.Image).GetPixel(clickedX - 1, clickedY + 1);
    Color point5 = ((Bitmap)pictureBoxSourcePicture.Image).GetPixel(clickedX, clickedY + 1);
    Color point6 = ((Bitmap)pictureBoxSourcePicture.Image).GetPixel(clickedX + 1, clickedY + 1);
    Color point7 = ((Bitmap)pictureBoxSourcePicture.Image).GetPixel(clickedX - 1, clickedY);
    Color point8 = ((Bitmap)pictureBoxSourcePicture.Image).GetPixel(clickedX + 1, clickedY);


    //int[] XOR = new int[] { oPoint.R };
    //int[] XOG = new int[] { oPoint.G };
    //int[] XOB = new int[] { oPoint.B };

    int[] XR = new int[] { point1.R, point2.R, point3.R, point4.R, point5.R, point6.R, point7.R, point8.R };
    int[] XG = new int[] { point1.G, point2.G, point3.G, point4.G, point5.G, point6.G, point7.G, point8.G };
    int[] XB = new int[] { point1.B, point2.B, point3.B, point4.B, point5.B, point6.B, point7.B, point8.B };

    double SumRed = 0;
    double SumGreen = 0;
    double SumBlue = 0;

    for (int i = 0; i < XR.Length; i++)
    {
        SumRed += (Math.Abs(oPoint.R - XR[i])) * (Math.Abs(oPoint.R - XR[i]));
        SumGreen += (Math.Abs(oPoint.G - XG[i])) * (Math.Abs(oPoint.G - XG[i]));
        SumBlue += (Math.Abs(oPoint.B - XB[i])) * (Math.Abs(oPoint.B - XB[i]));
    }

    MessageBox.Show("The Average Difference of Red is = "
            + Math.Sqrt(SumRed) + "\n"
            + "The Average Difference of Green is = "
            + Math.Sqrt(SumGreen) + "\n"
            + "The Average Difference of Blue is = "
            + Math.Sqrt(SumBlue) + "\n");
}
private void按钮noiseavr\u单击(对象发送者,事件参数e)
{
Zeko点=新点(25,25);
if(PictureBoxourcePicture.Image==null)
{
MessageBox.Show(“未加载图片”);
返回;
}
如果(pictureBoxSourcePicture.Height!=clickedY | | pictureBoxSourcePicture.Width!=clickedX)
{
MessageBox.Show(“Adeekll”);
//返回;
}
颜色点=((位图)pictureBoxSourcePicture.Image).GetPixel(点击X,点击Y);
颜色点1=((位图)pictureBoxSourcePicture.Image).GetPixel(单击X-1,单击Y-1);
颜色点2=((位图)pictureBoxSourcePicture.Image).GetPixel(点击X,点击Y-1);
颜色点3=((位图)pictureBoxSourcePicture.Image).GetPixel(单击X+1,单击Y-1);
颜色点4=((位图)pictureBoxSourcePicture.Image).GetPixel(单击X-1,单击Y+1);
颜色点5=((位图)pictureBoxSourcePicture.Image).GetPixel(点击X,点击Y+1);
颜色点6=((位图)pictureBoxSourcePicture.Image).GetPixel(单击X+1,单击Y+1);
颜色点7=((位图)pictureBoxSourcePicture.Image).GetPixel(clickedX-1,clickedY);
颜色点8=((位图)pictureBoxSourcePicture.Image).GetPixel(单击X+1,单击Y);
//int[]XOR=newint[]{oPoint.R};
//int[]XOG=newint[]{oPoint.G};
//int[]XOB=新的int[]{oPoint.B};
int[]XR=newint[]{point1.R,point2.R,point3.R,point4.R,point5.R,point6.R,point7.R,point8.R};
int[]XG=newint[]{point1.G,point2.G,point3.G,point4.G,point5.G,point6.G,point7.G,point8.G};
int[]XB=newint[]{point1.B,point2.B,point3.B,point4.B,point5.B,point6.B,point7.B,point8.B};
双总和=0;
双色绿色=0;
双色蓝=0;
对于(int i=0;i
您可以按如下方式计算积分:

        Color[] points = new Color[8];
        int[] xPos = { -1, 0, 1, -1, 0, 1, -1, 1 };
        int[] yPos = { -1, -1, -1, 1, 1, 1, 0, 0 };
        for (int i = 0; i < 8; i++)
           points[i] = ((Bitmap)pictureBoxSourcePicture.Image).GetPixel(clickedX + xPos[i], clickedY + yPos[i]);
Color[]点=新颜色[8];
int[]xPos={-1,0,1,-1,0,1,-1,1};
int[]yPos={-1,-1,1,1,1,0,0};
对于(int i=0;i<8;i++)
点[i]=((位图)pictureBoxSourcePicture.Image).GetPixel(点击X+xPos[i],点击Y+yPos[i]);
然后计算sumRed、sumGreen和SumBlue:

        for (int i = 0; i < points.Length; i++)
        {

            SumRed += Math.Pow( (Math.Abs(oPoint.R - points[i].R)),2);
            SumGreen += Math.Pow((Math.Abs(oPoint.R - points[i].G)), 2);
            SumBlue += Math.Pow((Math.Abs(oPoint.R - points[i].B)), 2);

        }
for(int i=0;i
它更简短,更容易理解。
希望这将是有用的

你曾经跟踪过
clickedX
clickedY
的值吗?你可以使用
System.Diagnostics.Debug.WriteLine
打印出值。我不想2更改我的代码,我只需要2处理错误,但无论如何都要感谢