2014-09-15 2 views
0

question d'origine: Original questionrectangle Rescale (Haut, Gauche, Bas, droite)

J'ai une image I1 de la taille height x width = (1500,500) redimensionnée à (500,300).

I1 contient des boîtes de délimitation caractérisées par leurs coordonnées (Top, Left, Bottom, Right).


Comment rééchelonner les coordonnées des boîtes englobantes lorsque la taille de I1 est changé? Ces formules sont-elles correctes?

double newTop = Math.Ceiling((top) * (double)pictureBox1.Height/(double)image1.Height); 
    double newLeft = Math.Ceiling((left) * (double)pictureBox1.Width/(double)image1.Width); 
    double newBottom = Math.Ceiling((bottom + 1) * (double)pictureBox1.Height/(double)image1.Height) - 1; 
    double newRight = Math.Ceiling((right + 1) * (double)pictureBox1.Width/(double)image1.Width) - 1; 

+1

Apparaît d'un bref coup d'oeil sans vraiment l'essayer. – Codor

+0

Etes-vous sûr de faire des divisions entières? Il me semble que vous allez rencontrer des erreurs massives à moins que je ne comprenne complètement votre code. – InBetween

+0

@InEntre vous avez raison. Peut-être à cause des nombres entiers je ne suis pas en mesure de redimensionner correctement la boîte de délimitation. Je vais l'essayer maintenant. Shoud Je prends le haut ou le bas des limites? pour la division –

Répondre

1

En général:

Tailles échelle par le facteur (nouvelle taille)/(ancienne taille).

Les coordonnées sont un peu plus complexe:

x2 = left2 + (x1 - left1) * width2/width1 
y2 = top2 + (y1 - top1) * height2/height1 

left et width, etc décrivent l'emplacement de l'ensemble de l'image. x et y décrivent la fonctionnalité en cours de transformation. Dans votre cas, les coins des limites sont des caractéristiques.

Si left1, left2, top1, top2 sont tous nuls, vous obtiendrez des expressions semblables à la vôtre.

Questions connexes