Как преобразовать координаты XY и высоту / ширину масштабированного изображения в изображение исходного размера?

Связанный вопрос

Я пытаюсь сделать то же самое, что и в связанном вопросе, но с C #. Я показываю масштабированное изображение и разрешаю пользователю выбрать область для обрезки. Однако я не могу просто взять x1y1, x2y2 координаты из масштабированного выделения изображения и обрезать его из оригинала. Я пробовал выполнить базовую математику, как в другом вопросе, но это, очевидно, тоже неправильный подход (он определенно ближе).

Изменить

Размеры исходного изображения: w = 1024 h = 768

Размеры масштабированного изображения: w = 550 h = 412

Я начинаю с изображения, скажем, 1024x768. Я хочу, чтобы он поместился как можно больше в коробку 550x550. Я использую следующий метод, чтобы получить размер масштабированного изображения (при сохранении соотношения сторон). Затем я выполняю базовое изменение размера до этих новых размеров.

Что касается области выбора, она может быть от (0,0) до (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;
}

11
задан Community 23 May 2017 в 12:25
поделиться