System.IndexOutOfRangeException при вызове GetPixel() для WriteableBitmap

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;
    }

Эта функция предназначена для обработки манипулирования Delta, когда я нажимаю и перетаскиваю на холст selectColor, yMove а также xMove 2 двойных, которые записывают общее движение. они объявлены prio к функции. Как видно из названия, я получаю IndexOutOfRangeExceptionи это указывает на х. Я не вижу, как это возможно, так как я установил максимальные / минимальные значения, которые находятся в пределах холста. Мой холст ровно 350x40, поэтому, когда x = 180, он не должен выдавать эту ошибку. Я немного запутался сейчас, любая помощь / совет будут оценены.

1 ответ

Решение

Установите ограничения на

    double xMax = 349;
    double yMax = 39;

0 .. 349 = 350 пикселей
0 .. 39 = 40 пикселей

Вы отключаетесь, когда вы устанавливаете xMove и yMove на фактические максимальные значения

Другие вопросы по тегам