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 на фактические максимальные значения