Преобразование координат прямоугольника в изображение с большим разрешением - PullRequest
0 голосов
/ 24 июня 2018

Я использую следующий код для преобразования координат маленького прямоугольника в более крупный, т. Е. Положение прямоугольника на маленьком изображении в ту же позицию на большем разрешении того же изображения

Rectangle ConvertToLargeRect(Rectangle smallRect, Size largeImageSize, Size smallImageSize)
{
    double xScale = (double)largeImageSize.Width / smallImageSize.Width;
    double yScale = (double)largeImageSize.Height / smallImageSize.Height;
    int x = (int)(smallRect.X * xScale + 0.5);
    int y = (int)(smallRect.Y * yScale + 0.5);
    int right = (int)(smallRect.Right * xScale + 0.5);
    int bottom = (int)(smallRect.Bottom * yScale + 0.5);
    return new Rectangle(x, y, right - x, bottom - y);
}

Но, похоже, проблема с некоторыми изображениями. Преобразованные координаты прямоугольника, кажется, находятся за пределами изображения.

ОБНОВЛЕНИЕ:

 img.Draw(rect, new Bgr(232, 3, 3), 2);
 Rectangle transret= ConvertToLargeRect(rect, orgbitmap.Size, bit.Size);
 target = new Bitmap(transret.Width, transret.Height);
 using (Graphics g = Graphics.FromImage(target))
      {
       g.SmoothingMode = SmoothingMode.HighQuality;
       g.DrawImage(orgbitmap, new Rectangle(0, 0, target.Width, target.Height),
       transret, GraphicsUnit.Pixel);
      }

Прямоугольник, нарисованный в небольшом разрешении Изображение

{X=190,Y=2,Width=226,Height=286}

enter image description here

Прямоугольник, преобразованный в оригинальное изображение большого разрешения {X=698,Y=7,Width=830,Height=931}

Исходное изображение

enter image description here

1 Ответ

0 голосов
/ 25 июня 2018

Прежде всего, если вы измените размер фигуры, она не должна сдвигаться. Это не то, что можно ожидать от увеличения формы. Это означает, что точки X, Y верхнего левого угла не должны быть преобразованы.

Во-вторых, вам не следует добавлять 0,5 к операциям вручную, это не чистый способ продолжить. Используйте функцию потолка, предложенную @ RezaAghaei

В-третьих, вы должны не вычесть X / Y из высоты / ширины, ваши вычисления должны быть сделаны как ширина * масштаб.

Пожалуйста, исправьте эти ошибки, и если это не сработает, я обновлю ответ дополнительными шагами.

...