使用CImg编辑RGB像素数据 - Visual C ++ 2008

时间:2013-07-01 14:17:14

标签: c++ visual-c++ visual-studio-2008 graphics cimg

使用CImg:我读到here您可以更改单个像素的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构造函数,它将原始像素数据作为其第一个参数,但我无法找到有关如何在运行数据之前格式化数据的任何信息构造函数 - 第一个参数在CImg.h的第9671行描述为模板。

非常感谢任何帮助;我已经有一段时间了。

2 个答案:

答案 0 :(得分:0)

表达式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()这样的代码。希望!

答案 1 :(得分:0)

您可以使用函数draw_point

根据参考手册:

  

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