我一直在努力了解如何使用CImg的绘图功能,但文档对我来说并不是很清楚。我只想画一个像素,但我不明白draw_point是如何工作的。有人可以给出一些draw_point和如何声明图像的例子吗?此外,还有更好的C ++替代品吗?我只想要最简单的C ++成像库。我想逐个像素地操纵一个空图像。还有更好的选择吗?
答案 0 :(得分:1)
我修改了CImg tutorial以显示如何使用draw_point,代码如下:
#include "CImg.h"
using namespace cimg_library;
int main()
{
int size_x = 640;
int size_y = 480;
int size_z = 1;
int numberOfColorChannels = 3; // R G B
unsigned char initialValue = 0;
CImg<unsigned char> image(size_x, size_y, size_z, numberOfColorChannels, initialValue);
CImgDisplay display(image, "Click a point");
while (!display.is_closed())
{
display.wait();
if (display.button() && display.mouse_y() >= 0 && display.mouse_x() >= 0)
{
const int y = display.mouse_y();
const int x = display.mouse_x();
unsigned char randomColor[3];
randomColor[0] = rand() % 256;
randomColor[1] = rand() % 256;
randomColor[2] = rand() % 256;
image.draw_point(x, y, randomColor);
}
image.display(display);
}
return 0;
}
方法 draw_point 有三个重载,可能会混淆使用。我使用了以下内容:
template<typename tc>
CImg<T>& draw_point(const int x0, const int y0,
const tc *const color, const float opacity=1)
有关详细信息,请参阅this 。
至于替代方案,如果你只想逐个像素地修改数据,也许你可以像使用libpng和libjpeg用于输入/输出的原始数据一样使用图像。
无论如何,我建议您阅读更多关于CImg的文档。我在一些项目中使用它,对我来说它非常方便。