Вращение BufferedImage - PullRequest
       6

Вращение BufferedImage

0 голосов
/ 19 февраля 2009

Как лучше всего повернуть изображение с буферизацией вокруг его центра, где градиент равен 1 градусу?

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

edit Размеры изображений, с которыми я имею дело, имеют размеры значков, поэтому обычно от 24x24 до 48x48 пикселей

Ответы [ 4 ]

3 голосов
/ 19 февраля 2009

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

[После того, как ОП отредактировал вопрос, чтобы указать размер изображения]

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

[Другая альтернатива]

Держите изображение в высоком разрешении. Примените все ваши преобразования к этому изображению, а затем уменьшите масштаб, чтобы получить значок.

2 голосов
/ 19 февраля 2009

Вы пытались установить сглаживание вашего графического контекста?

g2d.setRenderingHint(
    RenderingHints.KEY_ANTIALIASING,
    RenderingHints.VALUE_ANTIALIAS_ON
);
1 голос
/ 04 марта 2009

Как быстрое и грязное исправление, вы рассмотрели следующий метод:

  • увеличить изображение, например, в 8 раз, нарисовав его на новом буферизованном изображении
  • повернуть изображение, нарисовав его преобразованным аффинетрансформированным
  • снова уменьшите масштаб, нарисовав его на еще одном новом буферизованном изображении

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

0 голосов
/ 04 марта 2009

Вот несколько ссылок, которые объясняют, как вы можете продолжить работу при применении преобразований к значкам.

Java 2D Trickery: сглаженные преобразования изображения http://weblogs.java.net/blog/campbell/archive/2007/03/java_2d_tricker_1.html

Субпиксельная выборка Raster или DataBuffer в BufferedImage. http://forums.java.net/jive/thread.jspa?messageID=204921&tstart=0

...