Я пытаюсь увеличить масштаб своей программы. У меня возникла проблема с распределением нового пространства для моего масштабированного изображения, но я думаю, что он исправлен. Проблема, с которой я сталкиваюсь, заключается в том, что программа вылетает, когда я пытаюсь отправить свое изображение из своего временного владельца.Масштабирование изображения с помощью ближайшего соседа
Загруженное изображение находится в моем struct
Image
. Пиксели размещены в img->pixels
, высота в img->height
и ширина img->width
. Но я понятия не имею, почему программа вылетает, когда я передаю пиксели из своего в свой img
struct
, пока он не падает, когда я делаю противоположное. Вот код:
void makeBigger(Image *img, int scale) {
Image *tmp2;
tmp2 = (Image*)malloc(sizeof(Image));
tmp2->height = img->height*scale;
tmp2->width = img->width*scale;
tmp2->pixels = (Pixel**)malloc(sizeof(Pixel*)*tmp2->height);
for (unsigned int i = 0; i < img->height; i++)
{
tmp2->pixels[i] = (Pixel*)malloc(sizeof(Pixel)*tmp2->width);
for (unsigned int j = 0; j < img->width; j++)
{
tmp2->pixels[i][j] = img->pixels[i][j];
}
}
free(img->pixels);
//scaling up the struct's height and width
img->height *= scale;
img->width *= scale;
img->pixels = (Pixel**)malloc(sizeof(Pixel*)*img->height);
for (unsigned int i = 0; i < tmp2->height; i++)
{
img->pixels[i] = (Pixel*)malloc(sizeof(Pixel)*img->width);
for (unsigned int j = 0; j < tmp2->width; j++)
{
img->pixels[i][j] = tmp2->pixels[i+i/2][j+j/2];
}
}
}
Я был бы рад, если у вас есть представление о том, как заставить метод ближайшего соседа работать. Спасибо!
EDIT: Я пытаюсь обрезать внутренний прямоугольник, чтобы масштабировать его (увеличение).
Image *tmp = (Image*)malloc(sizeof(Image));
tmp->height = img->height/2;
tmp->width = img->width/2;
tmp->pixels = (Pixel**)malloc(sizeof(Pixel*) * tmp->height);
for (unsigned i = img->height/4 - 1; i < img->height - img->height/4; i++) {
tmp->pixels[i] = (Pixel*)malloc(sizeof(Pixel) * tmp->width);
for (unsigned j = img->width/4; j < img->width - img->width/4; j++) {
tmp->pixels[i][j] = img->pixels[i][j];
}
}
for (unsigned i = 0; i < img->height; i++) {
free(img->pixels[i]);
}
free(img->pixels);
img->height = tmp->height;
img->width = tmp->width;
img->pixels = tmp->pixels;
free(tmp);
"программа падает". Способ отладки таких проблем - отладчик. – kaylum
Да, я не уверен, в чем дело. Кажется, что tmp2-> pixels не получает никаких значений RGB, что кажется странным.Однако программа запускается, и у меня нет предупреждений. – Henke
Для этого нужен отладчик! Это позволяет вам пройти через код по строкам и изучить переменные, чтобы увидеть, где все начинает идти не так. – kaylum