2011-09-16 2 views
2

J'ai lu des informations sur la précision des sous-pixels mais je n'ai pas trouvé de moyen de le faire.Mouvement graphique de sous-pixels

Q: Comment puis-je déplacer un BufferedImage sur une Canvas à des vitesses non entières sans bégayer?

Je peux comprendre logiquement comment le processus se produit - léger redimensionnement avec Anti-Aliasing, mais je ne peux pas recréer cela en Java. (Je l'ai eu l'expérience avec Flash où un tel effet est créé par défaut sur la plupart des objets visuels.)

Note: sur le sujet avant que je l'ai présenté un question, mais après avoir cherché de plus amples informations, je reste ne pouvait pas mettre en œuvre ce que j'ai appris.

Si ce n'est pas trop de problèmes, un exemple simple serait très apprécié.

Merci d'avance.

Edit: Voilà comment je comprends l'effet peut être obtenu, bien que cela ne fonctionne pas pour moi:

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
g2.draw(new Rectangle2D.Double(x, y, width, height)); 

Il n'y a pas de changement visible entre les valeurs int doubles et similaires au x & y les champs, et quand j'essaye de créer un mouvement très lent (basé sur le temps du système, par exemple), je vois le rectangle ne rien faire d'autre que déplacer un seul pixel de temps en temps.

+0

Pourquoi 'Canvas'? et rien de 'javax.swing'? - C'est peut-être la raison. Avez-vous vu cet exemple (http://today.java.net/today/2006/02/23/SmoothAnimationDemo/com/sun/animation/SmoothAnimation.java)? –

Répondre

2

ButtonUITest offre une comparaison côte à côte de l'effet.

image

sur de nombreuses plateformes, il est possible de zoomer l'écran pour voir plus. Sous Mac OS X, - - fonctionne, tout comme /Developer/Applications/Graphics Tools/Pixie.app. Sur les autres plates-formes supportant Java, Zoom est un outil pratique pour l'examen des pixels anti-aliasés.

+0

Merci pour votre réponse, mais malheureusement, je ne vois pas comment cela est lié à ma question. Je peux créer des effets AA sur les formes, mais je ne peux pas créer de mouvement fluide quand un objet est déplacé d'une quantité non-entière de pixels à chaque image. – Acidic

+0

Ah, vous cherchiez une démo animée. Vous devez déplacer les coordonnées 'Rectangle2D' d'une fraction de pixel dans chaque image pour voir l'effet. – trashgod

+0

Ce qui est exactement ce que j'ai fait, mais il n'y a pas d'effet visible! – Acidic

1

Essayez le réglage aussi l'indication de présentation suivante (ainsi que des anti-aliasing):

g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); 
+0

Cela semble avoir un impact important, mais je ne peux pas dire si c'est pour le meilleur ou pour le pire. Je peux certainement encore détecter le bégaiement. – Acidic