我正在使用以下代码将小矩形坐标转换为更大的矩形坐标,即:小图像上的矩形位置到同一图像的较大分辨率上的相同位置
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}
矩形转换为原始的大分辨率图像qazxsw poi
原始图像
{X=698,Y=7,Width=830,Height=931}
首先,如果你调整形状大小,它不应该移动位置。这不是人们对扩大形状所期望的。这意味着不应转换左上角的X,Y点。
其次,你不应该手动添加0.5操作,这不是一个干净的方法。使用@RezaAghaei建议的天花板功能
第三,你不应该从高度/宽度减去X / Y,你的计算应该是宽度*比例。
请纠正这些错误,如果它不起作用,我会用额外的步骤更新答案。