C# 在WriteableBitmap上调用GetPixel()时System.IndexOutOfRangeException private void selectColor\u操纵delta(对象发送方,操纵deltaeventargs e) { xMove+=e.DeltaManipulation.Translation.X; yMove+=e.DeltaManipulation.Translation.Y; 双xMax=350; 双yMax=40; 如果(xMovexMax) { xMove=xMax; } if(yMoveyMax) { yMove=yMax; } int x=转换为32(xMove); int y=转换为32(yMove); var writeableBmp=新的WriteableBitmap(selectColor,null); var tempColor=writeableBmp.GetPixel(x,y); 笔刷图像颜色=新的SolidColorBrush(tempColor); txtBlockName.Foreground=imageColor; }

C# 在WriteableBitmap上调用GetPixel()时System.IndexOutOfRangeException private void selectColor\u操纵delta(对象发送方,操纵deltaeventargs e) { xMove+=e.DeltaManipulation.Translation.X; yMove+=e.DeltaManipulation.Translation.Y; 双xMax=350; 双yMax=40; 如果(xMovexMax) { xMove=xMax; } if(yMoveyMax) { yMove=yMax; } int x=转换为32(xMove); int y=转换为32(yMove); var writeableBmp=新的WriteableBitmap(selectColor,null); var tempColor=writeableBmp.GetPixel(x,y); 笔刷图像颜色=新的SolidColorBrush(tempColor); txtBlockName.Foreground=imageColor; },c#,xaml,windows-phone-8,writeablebitmap,C#,Xaml,Windows Phone 8,Writeablebitmap,此函数用于在名为selectColor的画布中单击并拖动时处理操纵增量yMove和xMove是记录总移动量的两个双倍值。它们是在函数之前声明的。正如标题所述,我得到一个索引autofrangeexception,它指向x。我不明白这是怎么可能的,因为我已经设置了画布中的最大/最小值。我的画布正好是350x40,所以当x=180时,它不应该给我这个错误。我现在有点困惑,任何帮助/建议都将不胜感激。将限制设置为 private void selectColor_ManipulationDelta(o

此函数用于在名为
selectColor
的画布中单击并拖动时处理操纵增量
yMove
xMove
是记录总移动量的两个双倍值。它们是在函数之前声明的。正如标题所述,我得到一个
索引autofrangeexception
,它指向x。我不明白这是怎么可能的,因为我已经设置了画布中的最大/最小值。我的画布正好是350x40,所以当x=180时,它不应该给我这个错误。我现在有点困惑,任何帮助/建议都将不胜感激。

将限制设置为

private void selectColor_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
    {
        xMove += e.DeltaManipulation.Translation.X;
        yMove += e.DeltaManipulation.Translation.Y;

        double xMax = 350;
        double yMax = 40;

        if (xMove < 0)
        {
            xMove = 0;
        }
        else if (xMove > xMax)
        {
            xMove = xMax;
        }

        if (yMove < 0)
        {
            yMove = 0;
        }
        else if (yMove > yMax)
        {
            yMove = yMax;
        }

        int x = Convert.ToInt32(xMove);
        int y = Convert.ToInt32(yMove);

        var writeableBmp = new WriteableBitmap(selectColor, null);
        var tempColor = writeableBmp.GetPixel(x, y);
        Brush imageColor = new SolidColorBrush(tempColor);

        txtBlockName.Foreground = imageColor;
    }
0。。349=350像素
0 .. 39=40像素


当您将xMove和yMove设置为实际的最大值时,您将被关闭一次

谢谢,伙计,完全忽略了这一点。修正了这个问题,当我看到winphone8标签时,我会接受答案。
    double xMax = 349;
    double yMax = 39;