首页 > 解决方案 > 将矩形坐标转换为高分辨率图像

问题描述

我正在使用以下代码将小矩形坐标转换为更大的坐标,即:小图像上的矩形位置到同一图像的较大分辨率上的相同位置

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}

原始图像

在此处输入图像描述

标签: c#.netgdi+system.drawing

解决方案


首先,如果您调整形状的大小,它不应该移动位置。这不是人们对扩大形状的期望。这意味着不应该转换左上角的 X、Y 点。

其次,您不应该将 0.5 手动添加到操作中,这不是一种干净的方式。按照@RezaAghaei 的建议使用天花板功能

第三,您不应该高度/宽度中减去 X/Y,您的计算应该按照宽度 * 比例进行。

请纠正这些错误,如果它不起作用,我将通过额外的步骤更新答案。


推荐阅读