1

使用 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)返回 type unsigned char *,这显然不是上面代码片段所暗示的变量。当我运行上面的代码时,我在构建输出中得到“错误 C2106:'=':左操作数必须是左值”。

一个潜在的解决方案是使用不同版本的CImg构造函数,它将原始像素数据作为其第一个参数,但我找不到任何关于如何在通过构造函数运行数据之前格式化数据的信息——第一个参数是描述作为CImg.h的第 9671 行中的模板。

任何帮助将不胜感激; 我已经有一段时间了。

4

2 回答 2

1

表达式img(100,200,0,0)不是 aunsigned char*而是 a 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()这样的。希望 !

于 2013-07-02T08:00:01.097 回答
0

您可以使用该功能draw_point

从参考手册:

CImg& draw_point ( const int x0, const int y0, const int z0, const tc *const color, const float opacity = 1 )

于 2019-01-06T10:33:24.303 回答