Related Question¿Cómo puedo transformar las coordenadas XY y la altura/ancho de una imagen escalada en una imagen de tamaño original?
Estoy tratando de hacer lo mismo que en la pregunta vinculada, pero con C#. Estoy mostrando una imagen escalada y estoy permitiendo que un usuario seleccione un área para cosechar. Sin embargo, no puedo tomar las coordenadas x1y1, x2y2 de la selección de imagen escalada y recortarla del original. Intenté hacer algunas matemáticas básicas como en la otra pregunta, pero obviamente tampoco es el enfoque correcto (definitivamente está más cerca).
Editar
originales Dimensiones de la imagen: w = 1024 h = 768
Scaled Dimensiones de la imagen: w = 550 h = 412
comienzo con una imagen, dicen 1024x768. Quiero que se ajuste lo más grande posible en una caja de 550x550. Estoy usando el siguiente método para obtener el tamaño de imagen escalado (manteniendo la relación de aspecto). Luego hago un cambio de tamaño básico a esas nuevas dimensiones.
En cuanto a un área de selección, puede ser cualquier cosa (0,0) a (100,100).
private static Rectangle MaintainAspectRatio(Image imgPhoto, Rectangle thumbRect)
{
int sourceWidth = imgPhoto.Width; int sourceHeight = imgPhoto.Height; int sourceX = 0; int sourceY = 0; int destX = 0; int destY = 0;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)thumbRect.Width/(float)sourceWidth);
nPercentH = ((float)thumbRect.Height/(float)sourceHeight);
//if we have to pad the height pad both the top and the bottom
//with the difference between the scaled height and the desired height
if (nPercentH < nPercentW)
{
nPercent = nPercentH;
destX = (int)((thumbRect.Width - (sourceWidth * nPercent))/2);
}
else
{
nPercent = nPercentW;
destY = (int)((thumbRect.Height - (sourceHeight * nPercent))/2);
}
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Rectangle retRect = new Rectangle(thumbRect.X, thumbRect.Y, destWidth, destHeight);
return retRect;
}
¿dónde está el cero de la imagen escalada? En la parte superior izquierda o en la parte inferior izquierda? –
Supongo que arriba a la izquierda – scottm
Escala una imagen con una transformación (matriz 2x2). Realiza una conversión de coordenadas con un inverso de esa matriz. Proporcione ejemplos numéricos específicos del tamaño de la imagen original, la ubicación y el tamaño de la imagen transformada, la ubicación: hace que sea más fácil para algunos pensar de esa manera, además de que elimina cierta ambigüedad. –