2010-04-20 37 views
12

Tôi có hình ảnh với một mẫu nhất định. Làm cách nào để lặp lại nó trong một hình ảnh khác bằng GDI? Có phương pháp nào để thực hiện điều đó trong GDI không?Lặp lại hình ảnh trong C#

+0

Loại mẫu nào? Bạn có muốn sao chép pixel không? –

Trả lời

22

Trong C#, bạn có thể tạo một TextureBrush mà sẽ gạch hình ảnh của bạn bất cứ nơi nào bạn sử dụng nó, và sau đó điền vào một khu vực với nó. Một cái gì đó như thế này (ví dụ điền vào toàn bộ hình ảnh) ...

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

Lưu ý, nếu bạn muốn kiểm soát hình ảnh được lát gạch, bạn sẽ cần tìm hiểu một chút về biến đổi.

Tôi gần như quên (thực sự tôi đã quên một chút): Bạn sẽ cần phải nhập khẩu System.Drawing (ví GraphicsTextureBrush) và System.Drawing.Drawing2D (ví WrapMode) để các mã trên để làm việc như là.

0

Không có chức năng để vẽ nên một hình ảnh cụ thể như là một "mẫu" (vẽ nó lặp đi lặp lại), nhưng nó nên được khá đơn giản để làm:

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: Bạn chuyển nó hình chữ nhật trên đối tượng 'Graphics' mà bạn muốn lấp đầy bằng hình ảnh. –

Các vấn đề liên quan