2015-03-28 2 views
-1

У меня есть проблема с этим кодом: частный:Локальный бинарный шаблон в C++

private: System::Void lBPToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { 
      int ** YP; 
      Bitmap^bmpPictureLBP = gcnew Bitmap(W, H); 
      int vn[2][8] = { { 0, 1, 1, 1, 0, -1, -1, -1 }, 
      { 1, 1, 0, -1, -1, -1, 0, 1 } }; 

      YP = new int*[W]; 
      for (int i = 0; i < W; i++) 
      { 
       YP[i] = new int[H]; 
       for (int j = 0; j < H; j++) 
       { 

        for (int k = 0; k < 8; k++) 
        for (int l = 0; k < 8; k++) 

         YP[i][j] = Y[i + vn[1][k]][j +vn[2][l]]; 


        bmpPictureLBP->SetPixel(i, j, Color::FromArgb(YP[i][j], YP[i][j], YP[i][j])); 
       } 
      } 

ли кто-нибудь, кто может мне помочь? Firtly не появляются ошибки, но после отладки они говорят мне, что «указание на то, что память заказа повреждена», а в окне «Авто» появляется красный: + YP [i] 0x0669AFB0 int *.

ответ

0

Я вижу несколько вопросов:

for (int k = 0; k < 8; k++) 
for (int l = 0; k < 8; k++) 

Я предполагаю, что это опечатка, а второй for цикл должен делать больше с l.

int vn[2][8] = { { 0, 1, 1, 1, 0, -1, -1, -1 }, 
       { 1, 1, 0, -1, -1, -1, 0, 1 } }; 

YP[i][j] = Y[i + vn[1][k]][j +vn[2][l]]; 
  • Вы объявили vn как массив размера 2, что означает, что индексы массива являются 0 и 1. Вы обращающиеся индексы массива 1 и 2; вы уходите от конца массива.
  • Вы получаете доступ к YP в разных соседних индексах: i + 1, i-1, j + 1, j-1.
    • Вы еще не инициализировали YP[i+1], вы не делаете этого до следующей итерации через цикл for.
    • Вы не проверяете пробег: что делать, если i или j - 0? Вы получите доступ к YP[-1] или YP[i][-1], ни один из которых не действителен.

Наконец, комментарий по алгоритму: Вы модифицирования YP[i][j] снова и снова, но вы не сохранение результатов последнего времени. Как показано, ваш алгоритм размытия будет просто скопировать пиксель YP[i-1][j+1], эффективно перемещая изображение в верхнем правом углу на один пиксель. (Возможно, у вас есть код, который правильно смешивает пиксели, и вы просто не копировали его в Интернет.)

Смежные вопросы