2010-04-20 14 views
12

Tengo una imagen con un cierto patrón. ¿Cómo lo repito en otra imagen usando GDI? ¿Hay algún método para hacerlo en GDI?Repetir imagen en C#

+0

¿Qué tipo de patrón? ¿Quieres copiar píxeles? –

Respuesta

22

En C#, se puede crear un TextureBrush que va coloque su imagen donde sea que la use, y luego llene un área con ella. Algo como esto (un ejemplo que llena toda la imagen) ...

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

Nota, si quieres algo de control sobre cómo es mosaico de la imagen, vas a tener que aprender un poco sobre las transformaciones.

Casi lo olvido (De hecho, me he olvidado un poco): Tendrá que importar System.Drawing (por Graphics y TextureBrush) y System.Drawing.Drawing2D (por WrapMode) para que el código anterior para trabajar como es.

0

No hay ninguna función para pintar una imagen en particular como un "patrón" (pintura en varias ocasiones), pero debe ser muy simple de hacer:

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

@sam: le pasa el rectángulo en el objeto 'Gráficos' que desea rellenar con la imagen. –

Cuestiones relacionadas