使用C#中的TextureBrush在不同高度开始的平铺图像问题
我正在尝试使用TextureBrush在尺寸宽度= 1000,高度= 16的矩形区域上平铺图像(16×16)以获得像UI这样的条带。
Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16); using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile)) { e.Graphics.FillRectangle(brush, myIconDrawingRectangle ); }
当我用x = 0绘制时,y = 0平铺从(0,0)开始按预期发生。
当我用x = 0绘制时,y = 50平铺从(0,50)开始,但绘制矩形不是从图像的开头开始。 它从图像的裁剪部分开始,然后重复。
怎么解决这个?
PS:我不想在DrawImage上反复手动循环。
为了确保矩形的开始从图像的开始开始,我们使用变换,如下面的代码所示。
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); }
我发现此链接很有帮助。 这详细解释了刷子和变换。
我在Windows窗体应用程序中尝试了这个,它按预期工作,在y == 14时绘制在(0,14)。是否可能在分配它和时间之间将y
设置为16,32等创建矩形的时间?
这是我用来测试的代码:
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Image myIcon = Image.FromFile(@"C:\Users\me\Pictures\test.jpg"); int x = 0; int y = 14; Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16); using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile)) { e.Graphics.FillRectangle(brush, myIconDrawingRectangle); } e.Graphics.DrawLine(Pens.Black, 0, 16, 1000, 16); }
结果:
使用TransalteTransform()来设置起始点,如果你不这样做,平铺将有一些偏移,以核心这个,如下所示:
brush.TranslateTransform(0,50);