-1

CImg では、座標系は左上隅から始まると見なされます。しかし、私は通常、座標系が左下隅から始まるのを見るのに慣れています。したがって、座標 (10,100)、(50,50)、(100,100) で三角形を描画しようとするたびに、描画が上下逆になります。これを反転するものはありますか?期待されるのはこれ欲しい

見つかったのはしかし、私はこれを見つけました

4

1 に答える 1

2

できるだけ簡単に言えば、yCImg に値を指定するたびに、最初に座標系を必要なものからそれが提供するものに反転する必要があります。おそらく、これを行う最も簡単な方法は、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、1 つの状況で使用するのを忘れると、追跡して修正するのにかなりの時間がかかる可能性があります。

別の方法として、元のメソッドに値を渡す前に、独自のサブクラスを作成し、値を取得して反転CImgするすべての関数をラップすることもできます。これには、サブクラスへの参照をパラメーターを期待するライブラリ関数に渡すときに機能するという利点があります。yyCImgCImg

多くのグラフィカル ライブラリがこのスタイルの座標を使用していることに注意してください。通常、このような座標系を使用すると、バッファーのアドレス指定がはるかに簡単になるためです。将来、コンピュータ グラフィックスでさらに多くの作業を行う予定がある場合は、この座標系をより数学的なものに強制しようとするのではなく、直接使用することを学ぶことをお勧めします。

于 2013-10-07T07:37:48.143 に答える