2D вращение изображения, мало вопросов - PullRequest
2 голосов
/ 26 января 2010

Я добавляю «вращение мыши» в мою программу 2D-рисования. Я получил весь работающий код, в основном вычисляя угол поворота от исходного щелчка мыши до того места, где в данный момент находится мышь.

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

Теперь моя проблема - рисование этого прямоугольника. Я рисую прямоугольник из положения x / y изображения, его ширина / высота соответствует объему изображения.

Однако, после вращения прямоугольного изображения, его новая ширина и высота намного больше, так как эти два снимка экрана должны помочь уточнить: Во время вращения и после вращения, затем вращение снова - маленькие «ручки» показывают, где x / y / width / height изображений простирается до

На втором скриншоте из-за поворота изображение было дополнено пробелами (это трудно описать текстом!). Например. изображение размером 200x100 может получиться размером 150x150 (приблизительно) после поворота, что выглядит немного странно при изменении размера во второй раз.

У кого-нибудь есть идеи, как это исправить?

Ответы [ 3 ]

3 голосов
/ 26 января 2010

Как правило, никогда не поворачивайте и не изменяйте размер ранее повернутого изображения, поскольку небольшие ошибки начнут появляться.

Как правило, проще сохранить копию исходного изображения, и база ВСЕХ изменений не влияет на это изображение.

Например, первый поворот составляет 5 градусов. Второй поворот - 15 градусов. Для рендеринга второго изображения поверните оригинал на 20 градусов и отобразите его.

Не уверен, поможет ли это или я неправильно понял ваш вопрос.

0 голосов
/ 26 января 2010

Вам необходимо сохранить исходные размеры изображения и текущий угол поворота, чтобы вы могли эффективно откатывать повороты правильно.Кроме того, вам необходимо сохранить исходные данные изображения.

Теперь происходит то, что ваша программа теряет информацию об исходном размере изображения, поэтому она использует то, что видит (правильно).То, что вам нужно, - это новая перерисовка исходных данных изображения, просто с другим поворотом.

0 голосов
/ 26 января 2010

Вы, вероятно, должны отслеживать текущее вращение изображения, чтобы вы могли заново нарисовать прямоугольник вокруг изображения при его текущем вращении. Если вам нужно повернуть более чем одну вещь, вам придется отслеживать слои и вращение каждого из них.

...