2016-11-25 2 views
0

Considérez le point aux coordonnées 821, 435 sur une image de pixel 1920, 1017, en atterissant quelque part au milieu. Maintenant, redimensionnez l'image à 1243, 633 pixels. Évidemment, notre point n'est plus à ces coordonnées, mais réduit à l'échelle avec l'image. Comment calculer les coordonnées du nouveau point?Résolution de l'échelle des emplacements des points de conservation d'image

Pour la suite assumer originalX = 1920 & newX = 1243 et que nous sommes en train de résoudre pour la première valeur x en ce moment (éventuellement faire l'échelle pour la y)

Je l'ai fait newX/originalX pour obtenir 0.64739583 que je peux utiliser pour faire originalX * 0.64739583 et obtenir 1243, indiquant newX est 64.739583% de originalX. Maintenant, revenez à x, 821. Le nouveau point x devrait être 482, sauf originalX * 0.64739583 = 531. 482 n'est pas 531, de sorte que les points ne correspondent pas comme ils devraient avec un% de mise à l'échelle de 64.7

Quel serait le calcul correct (si ces calculs sont décrits même faux et que les parties de l'image sont mise à l'échelle incorrecte) pour être en mesure d'obtenir les nouvelles coordonnées du point mis à l'échelle?

Quelques exemples de points avant/après mise à l'échelle:

  • old = {width=1920, x=1807, y=996}, new = {width=1280, x=1167, y=698}
  • old = {width=1920, x=1178, y=814}, new = {width=1280, x=1138, y=516}
  • old = {width=1920, x=5, y=831}, new = {width=1517, x=5, y=693}
+0

'x est devrait être 482 »- est prévu par qui? – MBo

+0

@MBo le point est un endroit spécifique d'une interface graphique dans l'image qui est directement au centre et légèrement décalé - c'est une capture d'écran d'un programme. 'x' étant supposé être' 482' est le résultat de la modification de la résolution du programme (dans ce cas, le retirer de maximized), ce qui lui donne une plus petite résolution. '821' est le' x' avant de ne pas maximiser, '482' est après. – Scarsz

Répondre

0

Si ces positions ont lieu vraiment, alors mise à l'échelle est pas linéaire comme

NewX = X * NewWidth/OldWidth 

Au lieu de cela, je vois la prochaine: Il n'y a pas mise à l'échelle, mais le décalage de l'image tout en gardant la position centrale

middle of 1920 = 960 
960 - 821 = 139 
middle of 1243 = 621 
621 - 482 = 139 ! 

donc la loi de transformation ressemble (je ne peux pas réclamer par exemple unique)

NewX = NewWidth/2 + (OldX - OldWidth/2) 
+0

Malheureusement, pas un ajustement parfait, mais certainement un bon essai pour l'échantillon que j'ai fourni. J'en ai ajouté d'autres; Je suis toujours désemparé à ce sujet. – Scarsz

+0

Pourriez-vous montrer des images pour ces transformations magiques? (Notez la même différence avec le bord droit dans le premier des nouveaux exemples) – MBo