Мне дан 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;
}
}
Пока не повезло.
'uint8_t Array2 [cols] [rows];' -> 'uint8_t Array2 [rows] [cols];'? – BLUEPIXY