我正在使用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
}
}
}
现在,我怎么知道旋转的矩形上的哪个位置转到新位图中的哪个位置。这就是我如何将旋转后的矩形的像素坐标转换为新的位图。
或者简单地说,是否可以将行和列从旋转的矩形映射到新的位图,如下所示?
对不起,如果问题不清楚。
在左侧,您绘制的像素本身是对角线的。但是,这并不是像素在源位图中的实际取向。源位图将具有水平和垂直方向的正方形像素。
所以,让我们看一下原始图像的一点:
考虑这四个像素。您可以在图形中看到顶部和底部像素与包含左侧和右侧像素中心的扫描线重叠。更具体地说,如果我们将源位图的实际像素方向与您建议的源像素位置叠加在一起,则会得到如下所示:
[您可以,当您尝试获取最终将成为目标图像右上角像素的像素值时,您要在这四组像素中要求顶部像素。但是顶部像素实际上由原始源图像中的两个不同像素组成!
最底线:如果要复制的视觉图像在复制过程中旋转,则
源像素与目标像素之间没有一一对应的关系。
当然,处理这种几何投影的重采样算法的确会应用concepts与您所建议的类似。但是它们以数学上合理的方式进行操作,其中必须根据需要合并或插入像素,以将源中的方形,水平和垂直方向的像素映射到目标中的方形,水平和垂直方向的像素。 。
[从字面上看您想要的唯一方法-以一对一的方式映射像素,而实际像素值本身没有任何变化-就是要旋转显示。
现在,所有这些都说了:我声称您正在尝试解决一个不仅不能解决的问题,而且还不值得解决的问题。]]
[在现代计算设备上,甚至在您可能旁边或放在口袋里的电话上,显示分辨率都很高,以至于旋转位图图像时发生的重新采样不会影响人类对位图的感知。
只需按照正常方式进行即可。它将正常工作。