gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:25:34 24 4
gpt4 key购买 nike

我正在使用 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

抱歉,如果问题不清楚。

最佳答案

您要求执行的操作实际上是不可能的。看看你的图表:

enter image description here

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

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

enter image description here

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

enter image description here

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

底线:如果您尝试复制的视觉图像在复制过程中发生旋转,则源像素和目标像素之间不存在一一对应关系。。 p>

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

要真正实现您的要求——在不改变实际像素值本身的情况下一对一地映射像素——唯一的方法是让显示器本身旋转。

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

现代计算设备的显示分辨率非常高,即使是您身边或口袋里的手机,旋转位图图像时发生的重新采样对位图的人类感知没有影响.

按照正常的方式进行。它会正常工作。

关于c# - 将旋转多边形内的内容传输到位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58271983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com