2017-08-07 4 views
0

Je travaille dans une programmation graphique en Java. En ce moment je peux mettre à l'échelle une image que je stocke dans un tableau 1D. (il range rangée par rangée)Comment puis-je définir le centre de mise à l'échelle?

Mon code comme où est la nouvelle position? newpoz = (int)(x * scale) + (int)(y * scale) * width;

Cela me donne une position dans le tableau. Mais c'est la mise à l'échelle de la coordonnée 0,0 qui est dans le coin supérieur gauche. Comment puis-je le mettre au centre si l'écran? Donc à screen.getWidth()/2; screen.getHeight()/2.

Demonstration

Quelqu'un peut aider? S'il y a une question, je vais répondre dans les commentaires.

Répondre

1

Pour l'échelle pixel coordonnées sur certains centre (a, b):

(x', y') = ([x - a] * scale + a, [y - b] * scale + b)

récupérer les données de pixels d'origine en utilisant pixelArray[y * width + x] comme avant, et définir le pixel de la même destination avec les nouvelles coordonnées.

EDIT: vous pouvez également regarder interpolation bilinéaire, car la méthode brute actuelle peut donner des bords dentelés dans l'image finale si elle est utilisée directement.

+0

merci pour votre réponse! – pocokknight

0

Si vous traduisez d'abord le centre de l'image en (0,0), puis redimensionnez l'image, puis traduisez l'image en arrière, vous aurez effectivement mis à l'échelle l'image avec le centrage souhaité.

  • x1 = x - screen_width/2
  • x2 = x1 * échelle
  • x3 = x2 + screen_width/2

Idem pour l'axe y. Avec un peu de maths, vous pouvez le faire en une seule étape. Exercice laissé à l'étudiant.

Mais si vous avez des problèmes, postez votre tentative, puis nous pouvons vous aider à corriger le code.