How to repeat an image in C#
Asked Answered
K

2

13

I have an image with a certain pattern. How do I repeat it in another image using GDI?
Is there any method to do it in GDI?

Kilian answered 20/4, 2010 at 13:0 Comment(1)
What kind of pattern? Do you want to copy pixels?Seger
A
28

In C#, you can create a TextureBrush that'll tile your image wherever you use it, and then fill an area with it. Something like this (an example that fills the whole image)...

// Use `using` blocks for GDI objects you create, so they'll be released
// quickly when you're done with them.
using (TextureBrush brush = new TextureBrush(yourImage, WrapMode.Tile))
using (Graphics g = Graphics.FromImage(destImage))
{
    // Do your painting in here
    g.FillRectangle(brush, 0, 0, destImage.Width, destImage.Height);
}

Note, if you want some control over how the image is tiled, you're going to need to learn a bit about transforms.

I almost forgot (actually I did forget for a bit): You'll need to import System.Drawing (for Graphics and TextureBrush) and System.Drawing.Drawing2D (for WrapMode) in order for the code above to work as is.

Angell answered 20/4, 2010 at 13:12 Comment(0)
H
0

There's no function to paint a particular image as a "pattern" (painting it repeatedly), but it should be pretty simple to do:

public static void FillPattern(Graphics g, Image image, Rectangle rect)
{
    Rectangle imageRect;
    Rectangle drawRect;

    for (int x = rect.X; x < rect.Right; x += image.Width)
    {
        for (int y = rect.Y; y < rect.Bottom; y += image.Height)
        {
            drawRect = new Rectangle(x, y, Math.Min(image.Width, rect.Right - x),
                           Math.Min(image.Height, rect.Bottom - y));
            imageRect = new Rectangle(0, 0, drawRect.Width, drawRect.Height);

            g.DrawImage(image, drawRect, imageRect, GraphicsUnit.Pixel);
        }
    }
}
Huneycutt answered 20/4, 2010 at 13:9 Comment(1)
@sam: You pass it the rectangle on your Graphics object that you want to fill with the image.Huneycutt

© 2022 - 2024 — McMap. All rights reserved.