2015-06-27 9 views
0

Мне дан 1-й массив, содержащий значения цвета для пикселей изображения. Массив имеет размер cols * rows. Я хочу изменить цвет определенного региона. Вызов функции задается 1-м массивом, его размером, левым, верхним, нижним, правым, а также желаемым цветом. То, что я пытался сделать, это скопировать значения массива 1d в 2d-массив, выполнить действие в массиве 2d, а затем скопировать обратно новые значения в 1d-массив. Я продолжаю получать ошибку сегментации ошибка. Вот код:Сегментация Fault C (1d массив до 2d массива и обратно)

void region_set(uint8_t array[], 
     unsigned int cols, 
     unsigned int rows, 
     unsigned int left, 
     unsigned int top, 
     unsigned int right, 
     unsigned int bottom, 
     uint8_t color) 
{ 

    if(!(left == right || top == bottom)){ 

     uint8_t Array2[cols][rows]; 

     int x, y; 

     for(int i= 0; i < rows * cols; i++){    
      x = i/rows; 
      y = i % cols; 
      Array2[y][x] = array[i]; 
     } 

     for(int y=left; y < right-1; y++){ 
      for(int x = top; x < bottom-1 ; x++){ 
       Array2[y][x] = color; 
      } 
     } 

     for(int i= 0; i < rows * cols; i++){    
      x = i/rows; 
      y = i % cols; 
      array[i] = Array2[y][x]; 
     } 

    } 
} 

Я использовал этот код, чтобы отразить изображение по горизонтали, и она работала:

for(int x=0; x<cols; x++){ 
for(int y =0; y< rows/2; y++){ 

    holdVal=array[x + y * rows]; 
    array[x + y * rows] = array[(rows-1-y)* rows + x]; 
    array[(rows-1-y) * rows + x] = holdVal; 

    } 
} 

Тогда я настроил его, чтобы попытаться заставить его работать для функции region_set:

for(int y=left; y< right-1; y++){ 
     for(int x = top; x< bottom - 1; x++){ 
      array[x + y * cols] = color; 
     } 
    } 

Пока не повезло.

+1

'uint8_t Array2 [cols] [rows];' -> 'uint8_t Array2 [rows] [cols];'? – BLUEPIXY

ответ

1

Вы должны сделать:

int k = 0; 
for(int i = 0; i < rows; ++i) 
{ 
    for(int j = 0; j < cols; ++j) 
    { 
      array[k++] = Array[i][j]; 
      // or 
      Array[i][j] = array[k++]; 
    } 
} 

Другие, чем ваш код выглядит вид грязный, просто принять этот подход. Также вы, похоже, написали [cols] [rows], а не [rows] [cols]!

+0

Спасибо вам за ответ. Я пробовал свой способ сделать это, но у меня все еще возникает ошибка ошибки сегментации. Я не уверен, что это вызывает. – user5056973

+0

Я попытался переключить их, но проблема все еще сохраняется. – user5056973

+0

@ user5056973 Пробовали ли вы использовать отладчик и посмотреть, что происходит? – Pavel

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