Я довольно новичок в C, и это мой первый вопрос здесь, поэтому я надеюсь, что смогу разобраться с моей проблемой.
Я написал функцию, которая применяет фильтр к изображению .bmp. Внутри функции я выделил память через mallo c () для хранения каждого пикселя с новым значением. После того, как я закончу sh, я хочу назначить новые значения исходным пикселям с помощью указателей. Я попробовал два способа сделать это, один работает, а другой нет, но я не понимаю разницу.
Здесь я объявляю два указателя:
RGBTRIPLE *copy = malloc(height * width * sizeof(RGBTRIPLE)); //RGBTRIPLE is the pixel struct
if (copy == NULL)
{
fprintf(stderr, "Memory allocation error\n");
exit(2);
}
RGBTRIPLE *rgb = &image[0][0]; // this points to first element of original image
Вот два метода, которые я пытался присвоить новым значениям. Не работает следующее:
int i;
for (i = 0; i < (height * width); i++)
{
*rgb = *copy;
rgb++;
copy++;
}
free(copy);
return;
Это работает:
int i;
for (i = 0; i < (height * width); i++)
{
*((RGBTRIPLE *)rgb + i) = *((RGBTRIPLE *)copy + i);
}
free(copy);
return;
Почему?