2009-02-19 5 views
0

Quelle est la meilleure façon de faire pivoter une image tamponnée autour de son centre où le dégradé est de 1 degré? Je sais qu'il y a AffineTransform, mais cela provoque des cisaillements et des étirements étranges ou des taches noires qui devraient être vierges.BufferedImage Rotation

modifier Les dimensions des images que je traite sont la taille des icônes, donc généralement 24x24 jusqu'à 48x48 pixels

Répondre

3

La qualité de rotation pour un petit angle varie fortement avec la taille de l'image. Quelle est la taille de votre image?

[Après l'OP modifié la question pour indiquer la taille de l'image]

OMI l'image est trop petit pour une rotation significative autre que par multiples de 90 degrés (son hypothèse d'un carré). J'ai peur que cela doive être fait manuellement par un graphiste pour obtenir la meilleure qualité possible.

[Une autre alternative]

Gardez une version de haute résolution de l'image autour. Appliquez toutes vos transformations à cette image, puis réduisez-la pour obtenir une icône.

+0

généralement entre 24x24 pixels à 48x48 pixels, c'est une très petite image –

+0

ouais, rien de ce petit, même un changement de 1 degré est jamais 1 degré. c'est soit 0 ou 45, n'est-ce pas? un pixel se déplace ou pas. –

+0

Huh? Bien sûr, il est possible de faire pivoter une petite image, cela signifie simplement que certains pixels se déplaceront, d'autres non. Considérons une ligne allant de (0,0) à (639,0) comparée à une ligne allant de (0,0) à (639,1), et ainsi de suite. – unwind

2

Avez-vous essayé de définir l'anti-aliasing de votre contexte graphique?

g2d.setRenderingHint(
    RenderingHints.KEY_ANTIALIASING, 
    RenderingHints.VALUE_ANTIALIAS_ON 
); 
1

Comme une solution rapide et sale, avez-vous examiné la méthode suivante:

  • échelle l'image d'un facteur, par exemple 8, en tirant sur un nouveau BufferedImage
  • faites pivoter le l'image, en le tirant transformé par un AffineTransform
  • échelle en arrière à nouveau, en le dessinant sur une autre nouvelle BufferedImage

Tous les artefacts de bas niveau doivent disparaître pendant la réduction. Ce n'est peut-être pas l'option la plus rapide, mais elle peut très bien faire ce que vous voulez avec un minimum d'agitation - et des solutions plus complexes peuvent se résumer à faire la même chose en coulisse.