2009-08-19 53 views
14

Tôi chỉ muốn vẽ các đối tượng 2D đơn giản như hình tròn, đường thẳng, hình vuông v.v. trong C#. Làm thế nào để làm điều đó? Quay trở lại trong Turbo C + + ngày tôi nhớ khởi tạo một số thư viện đồ họa để làm như vậy. Tôi có cần phải làm điều gì đó tương tự trong .NET không? Có khác gì đối với vật thể 3D không? Những thứ như DirectX có dễ dàng hơn không? Bất kỳ liên kết đến hướng dẫn hoặc mẫu được đánh giá cao.Làm cách nào để vẽ đồ họa đơn giản trong C#?

Trả lời

16

Như những người khác đã nói, hãy kiểm tra System.Drawing. (Tôi chỉ lặp lại điều đó để hoàn thành.) System.Drawing hiển thị thư viện vẽ Windows GDI+ cho ứng dụng của bạn.

Hướng dẫn tốt để giúp bạn bắt đầu nhảy với System.Drawing và GDI + có thể được tìm thấy tại C# Corner.

Một số hạng mục quan trọng cần lưu ý:

  1. Nhiều GDI + đối tượng thực hiện các giao diện IDisposable, và do đó cần được bọc trong using khối. Hãy chắc chắn bạn làm theo các quy ước xử lý thích hợp; không vứt bỏ các đối tượng GDI + có thể dẫn đến các hiệu ứng phụ thực sự khó chịu cho ứng dụng của bạn. (Các đối tượng GDI + trong .NET tương ứng với các tương đương Windows API bên dưới của chúng.)
  2. Các API như DirectX cực kỳ phức tạp và vì lý do chính đáng. Chúng được thiết kế không cho các hình dạng đơn giản, mà là cho các ứng dụng đa phương tiện phức tạp, có hiệu suất cao và tương tác cao. (Nói cách khác, trò chơi, thông thường.) Bạn có thể truy cập DirectX thông qua giao diện Managed DirectX, nhưng một lần nữa, nó có thể là quá mức cần thiết cho các mục đích trực tiếp của bạn.
  3. Nếu bạn quan tâm đến một cách dễ dàng hơn để làm việc với DirectX, XNA là cách để thực hiện. Tuy nhiên, đây là một thư viện dành riêng cho trò chơi, và một lần nữa có khả năng là quá mức cần thiết. Tôi hơi muộn một chút, nhưng theo những lời bình luận dưới đây, điều này không còn được hỗ trợ nữa. (Điều này có ý nghĩa, tôi đã không nghe bất cứ điều gì về nó trong nhiều năm.)
+4

"Theo email được gửi vào ngày 31 tháng 1 năm 2013, ** XNA không còn được phát triển ** nữa và nó không được hỗ trợ trong các lớp" Giao diện Metro "mới của Windows 8 cũng như trên nền tảng Windows RT." [Trích dẫn từ Wikipedia] (https://en.m.wikipedia.org/wiki/Microsoft_XNA) – klaas

+0

Có thể xem [unity3d] (http://unity3d.com) nó có hướng dẫn tốt và một giấy phép độc lập/cá nhân miễn phí. Hoặc kiểm tra [reddit] (https://www.reddit.com/r/gamedev/comments/1et2li/c_game_engines_other_than_xnamonogame/) – klaas

+0

Tôi không khuyến khích GDI + hoặc System.Drawing Tôi ở đây vì FillRectangle quá chậm, và nó từ từ gọi SafeNativeMethods GDI + (Gdip) FillRectangle waay quá chậm để có ích. đây là năm 2017, và tôi đang chiến đấu chống lại một chức năng tiêu chuẩn FillRectangle đơn giản, bạn có đùa tôi không. – hamish

0

Bạn cần phải sử dụng GDI +.

Cách bạn làm điều đó phụ thuộc một chút vào những gì bạn muốn vẽ. Bạn có thể vẽ trên điều khiển hoặc biểu mẫu hoặc bạn có thể vẽ trên đối tượng hình ảnh. Dù bằng cách nào, bạn cần một đối tượng System.Drawing.Graphics mà tôi tin rằng nằm trong System.Drawing.dll.

Bạn có thể khởi tạo lớp Bitmap mới và gọi Graphics.FromImage (myImage), sau đó vẽ bằng cách sử dụng các phương thức trên đối tượng Đồ họa mà bạn vừa tạo. Nếu bạn muốn vẽ trên biểu mẫu hoặc điều khiển, chỉ cần ghi đè phương thức OnPaint và tìm thuộc tính Đồ họa trên lớp EventArgs.

Thông tin thêm về System.Drawing namespace ở đây: http://msdn.microsoft.com/en-us/library/system.drawing.aspx

+0

Bạn không thể khởi tạo Hình ảnh mới, nhưng bạn có thể tạo nhanh Bitmap mới. – MusiGenesis

+0

À vâng, cảm ơn vì đã làm rõ. Tôi biết điều đó, nhưng quên mất. –

2

đọc về GDI, GDI +, System.Drawing namespace, ví dụ here.
DirectX không phải là thứ bạn sẽ sử dụng để vẽ các hình dạng đơn giản, thay vào đó là hiển thị các công cụ 3D phức tạp, cũng như sử dụng DX Api trong C# là một chút phức tạp hơn (mặc dù không khó).

0

Look cho API Managed đồ họa Direct3D trong .NET Source

13

Đây là một mẫu mã đơn giản mà sẽ giúp bạn bắt đầu (giả sử bạn có một PictureBox tên pictureBox1):

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); 
using (Graphics g = Graphics.FromImage(bmp)) 
{ 
    g.DrawLine(new Pen(Color.Red), 0, 0, 10, 10); 
} 
pictureBox1.Image = bmp; 

Các đồ họa đối tượng có một loạt các phương pháp vẽ khác, và Intellisense sẽ cho bạn thấy cách gọi cho họ.

0

GDI + bằng cách sử dụng System.Drawing

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