Problem in tiling image starting at different height using TextureBrush in C#

前端 未结 3 1987
野的像风
野的像风 2021-01-20 21:28

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         


        
相关标签:
3条回答
  • 2021-01-20 22:07

    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);
    
    0 讨论(0)
  • 2021-01-20 22:14

    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.

    0 讨论(0)
  • 2021-01-20 22:14

    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:

    enter image description here

    0 讨论(0)
提交回复
热议问题