Как указано выше, я пытаюсь изменить немного кода, который я написал на прошлой неделе, старый код:Использование указателей-структуру в C
char *pixel_b = NULL;
char *pixel_g = NULL;
char *pixel_r = NULL;
for (i=0;i<416;i++)
{
for (j=0;j<576;j++)
{
pixel_b = &framebuff[GET_PIXEL_B(j,i)];
pixel_g = &framebuff[GET_PIXEL_G(j,i)];
pixel_r = &framebuff[GET_PIXEL_R(j,i)];
*pixel_b = 255-*pixel_b;
*pixel_g = 255-*pixel_g;
*pixel_r = 255-*pixel_r;
}
}
Этот успешный доступ байтов в массиве и изменил значения (используемые для инвертирования изображения).
Я хотел создать структуру, содержащую три значения пикселя, например, так:
struct Pixel {
char *pixel_b;
char *pixel_g;
char *pixel_r;
};
Затем измените первый бит кода:
struct Pixel pixel;
for (i=0;i<416;i++)
{
for (j=0;j<576;j++)
{
pixel.pixel_b = &framebuff[GET_PIXEL_B(j,i)];
pixel.pixel_g = &framebuff[GET_PIXEL_G(j,i)];
pixel.pixel_r = &framebuff[GET_PIXEL_R(j,i)];
pixel.*pixel_b = 255-pixel.*pixel_b;
pixel.*pixel_g = 255-pixel.*pixel_g;
pixel.*pixel_r = 255-pixel.*pixel_r;
}
}
Однако, кажется, вы не можете просто сделайте это: P Итак, после некоторого осмотра, я подумал, что лучше всего изменить пиксель на * пиксель и не иметь указателей внутри него, однако это, похоже, тоже не работает. Есть ли хороший способ сделать то, что я пытаюсь сделать? Я не использовал структуры в C довольно долго, поэтому я частично ожидаю, что забываю что-то очень основное.
Любая помощь была бы принята с благодарностью.
Не могу поверить, что я не пробовал этого, подумал я. Большое спасибо :) От запуска в первый раз он чувствует себя немного медленнее, хотя это может быть просто мнимым, теоретически ли это будет медленнее, чем оригинальный метод? – GeorgeStorm
В принципе нет оснований полагать, что он должен быть медленнее. . разворот обрабатывается во время компиляции. Конечно, компиляторы иногда могут быть глупыми. – caveman