将旋转多边形内的内容转移到位图

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

我正在使用C#WinForms。旋转的多边形绘制在图片框上。旋转后的多边形的宽度和高度是101、101。现在,我想将旋转后的多边形的内容传输到大小为101,101的新位图]

enter image description here

我尝试使用此代码绘制矩形的像素

 for (int h = 0; h < pictureBox1.Image.Height; h++)
        {
            for (int w = 0; w < pictureBox1.Image.Width; w++)
            {
                if (IsPointInPolygon(rotatedpolygon, new PointF(w, h)))
                {
                    g.FillRectangle(Brushes.Black, w, h, 1, 1); //paint pixel inside polygon
                }                   
            }
        }

以下列方式绘制像素:enter image description here

现在,我怎么知道旋转的矩形上的哪个位置转到新位图中的哪个位置。这就是我如何将旋转后的矩形的像素坐标转换为新的位图。

或者简单地说,是否可以将行和列从旋转的矩形映射到新的位图,如下所示?

enter image description here

对不起,如果问题不清楚。

c# drawing transform picturebox rectangles
1个回答
0
投票
enter image description here

在左侧,您绘制的像素本身是对角线的。但是,这并不是像素在源位图中的实际取向。源位图将具有水平和垂直方向的正方形像素。

所以,让我们看一下原始图像的一点:

enter image description here

考虑这四个像素。您可以在图形中看到顶部和底部像素与包含左侧和右侧像素中心的扫描线重叠。更具体地说,如果我们将源位图的实际像素方向与您建议的源像素位置叠加在一起,则会得到如下所示:

enter image description here

[您可以,当您尝试获取最终将成为目标图像右上角像素的像素值时,您要在这四组像素中要求顶部像素。但是顶部像素实际上由原始源图像中的两个不同像素组成!

最底线:如果要复制的视觉图像在复制过程中旋转,则

源像素与目标像素之间没有一一对应的关系。

当然,处理这种几何投影的重采样算法的确会应用concepts与您所建议的类似。但是它们以数学上合理的方式进行操作,其中必须根据需要合并或插入像素,以将源中的方形,水平和垂直方向的像素映射到目标中的方形,水平和垂直方向的像素。 。

[从字面上看您想要的唯一方法-以一对一的方式映射像素,而实际像素值本身没有任何变化-就是要旋转显示。

现在,所有这些都说了:我声称您正在尝试解决一个不仅不能解决的问题,而且还

不值得解决的问题。]]

[在现代计算设备上,甚至在您可能旁边或放在口袋里的电话上,显示分辨率都很高,以至于旋转位图图像时发生的重新采样不会影响人类对位图的感知。

只需按照正常方式进行即可。它将正常工作。
© www.soinside.com 2019 - 2024. All rights reserved.