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

C++ 如何从左下角而不是左上角开始CImg绘图?,c++,cimg,C++,Cimg,在CImg中,坐标系被视为从左上角开始。 但是,我通常习惯于从左下角看到坐标系。 所以当我试图画一个坐标为(10100),(50,50),(100100)的三角形时 我把画弄颠倒了。 有人可以把这个翻过来吗?我想要这个 但是我发现了这个简单地说,每次你给CImg指定一个y值时,你需要首先将坐标系从你想要的翻转到它提供的。也许最简单的方法是编写自己的函数,为您转换y值: unsigned int flip_y( unsigned int y, unsigned int height ) {

在CImg中,坐标系被视为从左上角开始。 但是,我通常习惯于从左下角看到坐标系。 所以当我试图画一个坐标为(10100),(50,50),(100100)的三角形时 我把画弄颠倒了。 有人可以把这个翻过来吗?我想要这个


但是我发现了这个

简单地说,每次你给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
子类,并在将值传递给原始
CImg
方法之前包装所有接受
y
值并反转
y
的函数。这样做的好处是,在将对子类的引用传递给需要
CImg
参数的库函数时,可以工作


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

@bvalbas,有什么帮助吗?哦,对不起,有人不工作了!它不应该是:返回高度-y-1?