使用C#中的TextureBrush在不同高度开始的平铺图像问题

Rea*_*ed. 3 c# tiling image

我试图使用TextureBrush在尺寸宽度= 1000,高度= 16的矩形区域上平铺图像(16x16)以获得像UI一样的条带.

 Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16);
 using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile))
 {
    e.Graphics.FillRectangle(brush, myIconDrawingRectangle );
 }
Run Code Online (Sandbox Code Playgroud)

当我用x = 0绘制时,y = 0平铺从(0,0)开始按预期发生.

当我用x = 0绘制时,y = 50平铺从(0,50)开始,但绘制矩形不是从图像的开头开始.它从图像的裁剪部分开始,然后重复.

怎么解决这个?

PS:我不想在DrawImage上重复手动循环.

Rea*_*ed. 10

为了确保矩形的开始从图像的开始开始,我们使用变换,如下面的代码所示.

Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16);
using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile))
{
    brush.TranslateTransform(x,y);
    e.Graphics.FillRectangle(brush, myIconDrawingRectangle);
}
Run Code Online (Sandbox Code Playgroud)

我发现此链接很有帮助.这详细解释了刷子和变换.