c# - 在 C# 中创建一个填充有平铺图像的多边形

标签 c# system.drawing

我正在创建一个应用程序,它可以在用户设计相框时将其可视化。为了创建框架,我绘制了 4 个代表木头的物理位的多边形,并使用 TextureBrush 来填充它。

这对左边缘和上边缘非常有效。但是,对于底部和右侧边缘,此方法不起作用。在我看来,TextureBrush 是从图像上的点 (0,0) 开始平铺的,而不是在我绘制的多边形内。因此,图 block 不与多边形对齐。通过调整图像的大小,我可以使图 block 完美对齐。

如何创建一个任意定位的多边形并用平铺图像填充它,从多边形内的点 (0,0) 开始,而不是 Canvas ?

FillPolygon 和 TextureBrush 如果有更好的解决方案我就不执着了。

例子

alt text

最佳答案

我刚刚找到了答案。我正在尝试向 TextureBrush 构造函数添加 BoundingBox,但我一直收到 OutOfMemory 异常,并认为这是我不理解的。结果证明这是 .NET 框架中的错误

http://connect.microsoft.com/VisualStudio/feedback/details/90973/texturebrush-constructor-throws-out-of-memory-exception-when-providing-the-bounding-rectangle

解决方法是使用变换来移动纹理

var brush = new TextureBrush(new Bitmap(imagefile));

Matrix mtx = brush.Transform;
mtx.Translate(xoffset, 0);
brush.Transform = mtx;

关于c# - 在 C# 中创建一个填充有平铺图像的多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4439075/

相关文章:

c# - 如何知道 guest 用户是否正在运行应用程序 - C#?

c# - 如何为 ASP.NET Core 应用程序配置 Azure 应用服务日志记录提供程序?

c# - 如何获取 System.Drawing.Graphics 对象绘制的图像?

.net - PDF转换为黑白PNG

c# - 位图类不处理流?

c# - 计算缩放级别以使图像适合面板

c# - 如何使用 Qt Quick 显示富文本格式 (rtf)?

c# - 非托管代码中的 .net 组件 - 性能?

c# - 帮助使用 SystemParametersInfo

c# - 与 Windows 7 相比,为什么 System.Drawing.Image.GetPropertyItem 在 Windows XP/2003 上的行为不同