Я пришел к вам все раньше с проблемой, которая была просто ошибкой, поэтому я надеюсь, что глаза будут выглядеть одинаково.Перелистывание изображения PPM в C
Это в C
Я должен перевернуть изображение РРМ по горизонтали, но мой текущий код либо рисует Сегментация Fault или на самом деле не переворачивать ничего.
код я использую, который рисует Сегментация Fault является:
int a, b, x, y;
x = 3 * myPic->rows;
y = 3 * myPic->cols;
for(a = 0; a < (y/2); a++) {
for(b = 0; b < x; b++) {
Pixel temp = myPic->pixels[a][b];
myPic->pixels[a][b] = myPic->pixels[y - a - 1][b];
myPic->pixels[y - a - 1][b] = temp;
}
}
return myPic;
}
Код, который не возвращает изменения:
int a, b, x, y;
for(a = 0; a < myPic->rows; a++) {
for(b = 0; b < myPic->cols; b++) {
Pixel temp = myPic->pixels[a][b];
myPic->pixels[a][b] = myPic->pixels[myPic->cols - a - 1][b];
myPic->pixels[myPic->cols - a - 1][b] = temp;
}
}
return myPic;
Поскольку ПМП изображения имеют значения RGB, я предположим, что значения строк и столбцов следует умножить на три. И я подумал, что, пройдя весь путь, вы вернетесь к оригиналу, поэтому я разделил ширину (столбцы) на два. Я застрял, и я надеюсь, что это небольшая ошибка, может ли кто-нибудь помочь?
вы бежите от конца изображения. 'myPic-> pixels [a] [b]' идет стрелой, потому что 'a' и' b' устанавливаются в три раза в размере изображения. вы не можете просто начать доступ к индексам массивов, которые не существуют. –
Хорошо, спасибо, что имеет смысл ... Должен ли я перераспределять myPic-> pixels [a] [b] в три раза больше? Как я могу это сделать? – yup