-1

在 CImg 中,坐标系被认为是从左上角开始的。但是,我通常习惯于从左下角开始查看坐标系。因此,每当我尝试用坐标 (10,100),(50,50),(100,100) 绘制一个三角形时,我都会将图形颠倒过来。有什么可以翻转这个吗?预期是我要这个

发现是但我发现了这个

4

1 回答 1

2

说得尽可能简单,每次你y给 CImg 指定一个值时,你需要先把坐标系从你想要的东西翻转到它提供的东西。也许最简单的方法是编写自己的函数来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这将具有在将子类的引用传递给期望参数的库函数时能够工作的优势。

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

于 2013-10-07T07:37:48.143 回答