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

Ada*_*ope 5 c# system.drawing

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

这适用于左边和上边缘.但是,对于底边和右边,此方法不起作用.在我看来,TextureBrush是从图像上的点(0,0)平铺而不是在我绘制的多边形内.结果,图块不与多边形对齐.通过调整图像的大小,我可以让瓷砖完美排列.

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

如果有更好的解决方案,我没有附加到FillPolygon和TextureBrush.

替代文字

Ada*_*ope 4

我刚刚找到了答案。我正在尝试向 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;
Run Code Online (Sandbox Code Playgroud)