如何从左下角而不是左上角开始CImg绘图?

时间:2013-10-07 05:51:01

标签: c++ cimg

在CImg中,坐标系统被认为是从左上角开始的。 但是,我通常习惯于看到从左下角开始的坐标系统。 所以,每当我试图用坐标绘制三角形(10,100),(50,50),(100,100) 我把图画颠倒了。 是否可以翻转这个?Expected is 我想要这个

Found is 但我发现了这个

1 个答案:

答案 0 :(得分:2)

尽可能简单地说,每次为CImg指定y值时,您需要先将坐标系从您想要的位置翻转到它提供的位置。也许最简单的方法是编写自己的函数,为您转换y值:

unsigned int flip_y( unsigned int y, unsigned int height ) {
    return height - y;
}

这意味着您需要指定y的每个地方,您必须记住使用该功能:

img.draw_text( x, y, "hello world!", ...);
// becomes
img.draw_text( x, flip_y( y, img.height() ), "hello world!", ...);

可以理解的是,这会非常繁琐,并且忘记在单一情况下使用flip_y可能需要很长时间才能找到并修复。

作为替代方案,您可以创建自己的CImg子类并包装所有采用y值的函数并反转y,然后将值传递给原始CImg } 方法。这样做的好处是能够在将对子类的引用传递给期望CImg参数的库函数时起作用。

请记住,许多图形库使用这种坐标样式,通常是因为使用这种坐标系统进行缓冲区寻址要容易得多。如果你计划将来在计算机图形学方面做更多的工作,我建议学习直接使用这个坐标系,而不是试图强迫它更加数学化。