I am trying to tile an image(16x16) over a Rectangle area of dimensions width=1000, height=16 using TextureBrush to get a strip like UI.
Rectangle myIconD
using TransalteTransform() to set up start point,if u do not do this, tiling would have some offset, to corect this, like below:
brush.TranslateTransform(0,50);
To ensure that start of the rectangle starts with start of the image we have use transforms as shown in below code.
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);
}
I found this link helpful. This explains about brushes and transforms in detail.
I tried this in a Windows Forms application, and it works as expected, drawing at (0, 14) when y == 14. Is it possible y
is being set to 16, 32, etc. between the time you assign it and the time the rectangle is created?
Here is the code I used to test:
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);
}
and the result: