Я использую следующий код для преобразования координат маленького прямоугольника в более крупный, т. Е. Положение прямоугольника на маленьком изображении в ту же позицию на большем разрешении того же изображения
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}
Прямоугольник, преобразованный в оригинальное изображение большого разрешения {X=698,Y=7,Width=830,Height=931}
Исходное изображение