【问题标题】:System.IndexOutOfRangeException when calling GetPixel() on a WriteableBitmap在 WriteableBitmap 上调用 GetPixel() 时出现 System.IndexOutOfRangeException
【发布时间】:2013-05-07 11:43:35
【问题描述】:
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;
    }

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

【问题讨论】:

    标签: c# xaml windows-phone-8 writeablebitmap


    【解决方案1】:

    将限制设置为

        double xMax = 349;
        double yMax = 39;
    

    0 .. 349 = 350 像素
    0 .. 39 = 40 像素

    当您将 xMove 和 yMove 设置为实际的最大值时,您会变得与众不同

    【讨论】:

    • 谢谢,完全忽略了这一点。解决了这个问题,我会尽快接受答案
    • 忽略了winphone8这个标签。
    猜你喜欢
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多