2013-10-07 1 views
-1

В CImg система координат считается запущенной в верхнем левом углу. Но, я обычно привык видеть, что система координат начинается с нижнего левого угла. Так что всякий раз, когда я пытаюсь нарисовать треугольник с координатами (10, 100), (50,50), (100,100) Я получил рисунок вверх дном. Есть ли возможность перевернуть это? Expected is Я хочу этоКак начать рисунок CImg из нижнего левого угла, а не в верхний левый угол?

Found is Но я нашел

+0

@bvalabas, любая помощь? Извините, пометка кто-то не работает! – web2dev

ответ

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.

Имейте в виду, что многие графические библиотеки используют этот стиль координат, как правило, потому что гораздо проще выполнять адресацию буфера с такой системой координат. Если вы планируете в будущем намного больше работать с компьютерной графикой, я бы рекомендовал учиться использовать эту систему координат напрямую, вместо того чтобы пытаться заставить ее более математически.

+0

Не должно быть: return height - y - 1; ? –

Смежные вопросы