У меня есть изображение с определенным рисунком. Как повторить его на другом изображении с помощью GDI? Есть ли способ сделать это в GDI?
Повторить изображение в С#
Ответ 1
В С# вы можете создать 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
), чтобы код выше, чтобы работать как есть.
Ответ 2
Нет никакой функции рисовать конкретное изображение как "шаблон" (рисовать его несколько раз), но это должно быть довольно просто:
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);
}
}
}