Как повторить изображение в C#

У меня есть изображение с определенным шаблоном. Как я повторяю его в другом изображении с помощью GDI?
Там какой-либо метод должен сделать это в GDI?

13
задан shA.t 1 September 2018 в 12:22
поделиться

2 ответа

В C # вы можете создать TextureBrush, который будет размещать ваше изображение мозаикой везде, где вы его используете, а затем заполнять им область. Что-то вроде этого (пример, который заполняет все изображение) ...

// 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);
}

Обратите внимание, если вы хотите некоторый контроль над мозаикой изображения, вам нужно будет немного узнать о преобразованиях.

Чуть не забыл (на самом деле я немного забыл): вам нужно импортировать System.Drawing (для Graphics и TextureBrush ) и System.Drawing.Drawing2D (для WrapMode ), чтобы приведенный выше код работал как есть.

24
ответ дан 1 December 2019 в 21:52
поделиться

Нет функции для рисования определенного изображения в виде «узора» (повторного рисования), но это должно быть довольно просто:

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);
        }
    }
}
0
ответ дан 1 December 2019 в 21:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: