Редактирование данных пикселей RGB с помощью CImg — Visual C ++ 2008

Используя 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.

Любая помощь будет принята с благодарностью; Я был в этом некоторое время.

1

Решение

Выражение 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()как это. С надеждой !

0

Другие решения

Вы можете использовать функцию drawpoint,

Из справочного руководства:

CImg& draw_point (
const int x0,
const int y0,
const int z0,
const tc ∗ const color,
непрозрачность const float = 1)

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector