2010-04-20 14 views
12

Mam obraz o pewnym wzorze. Jak mogę go powtórzyć na innym obrazie przy użyciu GDI? Czy jest jakiś sposób to zrobić w GDI?Powtórz obraz w C#

+0

Jaki rodzaj wzoru? Czy chcesz skopiować piksele? –

Odpowiedz

22

W języku C#, można utworzyć TextureBrush że będziemy ułóż swój obraz w dowolnym miejscu, a następnie wypełnij nim obszar. Coś takiego (przykład, który wypełnia cały obraz) ...

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

Uwaga, jeśli chcesz jakąś kontrolę nad tym, w jaki sposób obraz jest płytki, będziesz musiał nauczyć się trochę o transformacji.

zapomniałbym (właściwie, zapomniał na chwilę): Musisz importować System.Drawing (dla Graphics i TextureBrush) i System.Drawing.Drawing2D (dla WrapMode) w celu podania kodu powyżej do pracy, jak jest.

0

Nie ma funkcja malować konkretny obraz jako „wzór” (malowanie go wielokrotnie), ale powinno być dość proste do zrobienia:

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: Podajesz prostokąt na obiekcie 'Graphics', który chcesz wypełnić obrazem. –