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

Posted

技术标签:

【中文标题】使用 CImg 编辑 RGB 像素数据 - Visual C++ 2008【英文标题】:Edit RGB pixel data using CImg - Visual C++ 2008 【发布时间】:2013-07-01 14:17:14 【问题描述】:

使用 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 *类型,这显然不是上面sn-p所暗示的变量。当我运行上面的代码时,我的构建输出中出现“错误 C2106:'=':左操作数必须是左值”。

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

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

【问题讨论】:

CImg.draw_point() facepalm 【参考方案1】:

表达式img(100,200,0,0) 不是unsigned char*,而是unsigned char&amp;,这有很大的不同。当然你可以毫无问题地写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&lt;T&gt;::operator()这样的。希望!

【讨论】:

【参考方案2】:

您可以使用函数draw_point

来自参考手册:

CImg&draw_point ( 常量 int x0, const int y0, 常量 int z0, const tc *const 颜色, 常量浮动不透明度 = 1)

【讨论】:

以上是关于使用 CImg 编辑 RGB 像素数据 - Visual C++ 2008的主要内容,如果未能解决你的问题,请参考以下文章

CImg 立方子像素位置

使用CImg将图像文件转换为像素矢量?

CImg基本像素操作

CImg添加透明通道

如何从窗口获取像素数据\像素缓冲区并提取RGB?

为啥将 unsigned char 用于 RGB 像素数据?