Используя CImg: я читаю Вот что вы можете изменить данные RGB отдельного пикселя следующим образом:
CImg<float> img("filename.jpg");
// Change the (100,200) pixel to Red.
img(100,200,0,0) = 255; //R
img(100,200,0,1) = 0; //G
img(100,200,0,2) = 0; //B
но img(100, 200, 0, 0)
возвращает тип unsigned char *
, что, очевидно, не является переменной, как следует из приведенного выше фрагмента. Когда я запускаю приведенный выше код, я получаю «ошибка C2106: ‘=’: левый операнд должен иметь значение l» в выводе моей сборки.
Потенциальным решением будет использование другой версии CImg
конструктор, который принимает необработанные данные пикселей в качестве первого параметра, но я не могу найти никакой информации о том, как отформатировать данные, прежде чем запускать их через конструктор — первый параметр описывается как шаблон в строке 9671 CImg.h.
Любая помощь будет принята с благодарностью; Я был в этом некоторое время.
Выражение img(100,200,0,0)
это не unsigned char*
но unsigned char&
что имеет огромное значение. Конечно можно написать img(100,200,0,0) = value
без проблем (если только ваш img
переменная const
), Я постоянно использую это.
Также обратите внимание, что третий аргумент может быть опущен в вашем случае, так как он всегда 0
так что вы можете написать img(x,y,0)=255; img(x,y,1)=1; img(x,y,2)=1;
,
Посмотрите на примеры, представленные в пакете CImg, вы увидите, что многие коды используют CImg<T>::operator()
как это. С надеждой !
Вы можете использовать функцию drawpoint
,
Из справочного руководства:
CImg& draw_point (
const int x0,
const int y0,
const int z0,
const tc ∗ const color,
непрозрачность const float = 1)