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

Tranfer Contents inside a Rotated Polygon to Bitmap

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

的新位图中

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

 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
                }                   
            }
        }

像素的绘制方式如下:

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

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

抱歉,如果问题不清楚。

你要求做的事情实际上是不可能的。看看你的图表:

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

那么,让我们看一下您的原始图片:

考虑这四个像素。您可以在绘图中看到,从水平和垂直方向考虑,顶部和底部像素与左侧和右侧像素重叠。更具体地说,如果我们将源位图的实际像素方向与您建议的源像素位置叠加,我们会得到如下结果:

如您所见,当您尝试获取最终将成为目标图像右上角像素的像素值时,您需要的是该组四个像素中的顶部像素。但是那个顶部像素实际上是由原始源图像中的两个不同像素组成的!

底线:如果您要复制的视觉图像在复制过程中会旋转,源像素和目标像素之间没有一一对应关系.

可以肯定的是,处理这种几何投影的重采样算法确实应用了与您提议的相似的概念。但是他们以一种数学上合理的方式这样做,其中像素必须根据需要进行合并或插值,以将来自源的方形、水平和垂直方向的像素映射到目标中的方形、水平和垂直方向的像素.

您可以从字面上获得您所要求的唯一方法 — 在一对一的基础上映射像素,而实际像素值本身没有任何变化 — 是拥有一个本身旋转的显示器.

现在,综上所述:我声称您要解决的问题不仅无法解决,而且不值得解决

现代计算设备的显示分辨率非常高,即使在您身边或口袋里的 phone 上,旋转位图图像时发生的重新采样对位图的人类感知。

按正常方式进行即可。它将正常工作。