2013-05-07 1 views
1
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; 
    } 

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

ответ

2

Установите пределы

double xMax = 349; 
    double yMax = 39; 

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

Вы вне по одному при установке XMove и yMove к фактические максимальные значения

+0

спасибо, человек, не обратил на это внимание. исправил проблему, примет ответ в тот момент, когда я смогу –

+0

Сняв тег winphone8. – Steve