将矩形坐标转换为大分辨率图像

问题描述 投票:0回答:1

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

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

矩形转换为原始的大分辨率图像qazxsw poi

原始图像

{X=698,Y=7,Width=830,Height=931}

c# .net gdi+ system.drawing
1个回答
0
投票

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

其次,你不应该手动添加0.5操作,这不是一个干净的方法。使用@RezaAghaei建议的天花板功能

第三,你不应该从高度/宽度减去X / Y,你的计算应该是宽度*比例。

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

© www.soinside.com 2019 - 2024. All rights reserved.