2009-07-09 29 views
8

Khi GDI + xuất hiện, tôi nhớ tất cả các brouhaha về cách thức "mới, nhanh hơn, tốt hơn" để hiển thị nội dung trong Windows. Nhưng mỗi khi tôi nhìn vào nó, nó dường như với tôi rằng nó đã thực sự chỉ là một wrapper COM xung quanh GDI.GDI + chỉ là một lớp trên đầu trang của GDI, hoặc một cái gì đó mới?

Điều đó có đúng không? Hay GDI + thực sự là một thư viện đồ họa độc lập chỉ đơn giản là chia sẻ một số mô hình với GDI?

Cá nhân, tôi không chắc nó có thể độc lập như thế nào, nhưng tôi chưa bao giờ thấy một tuyên bố xác định theo cách này hay cách khác.

Trả lời

7

Nhiều chức năng GDI được tăng tốc bởi phần cứng đồ họa và một số thói quen GDI + có thể sử dụng GDI bên dưới. Nhưng hầu hết GDI + là độc lập của GDI.

Một ví dụ quan trọng và nói là hiển thị văn bản. Trong kết xuất văn bản GDI + được thực hiện hoàn toàn bằng phần mềm; tính năng chống răng cưa, glyph pixel-fitting và các hiệu ứng khác được thực hiện mà không cần card màn hình.

alt text http://i.msdn.microsoft.com/ms533818.fontstext10(en-us,VS.85).png

Chris Jackson của Microsoft đã có một bài viết trên blog thú vị nơi ông cấu hình các speed difference between text rendering in GDI and GDI+:

... con đường mã GDI của tôi đã được render khoảng 99.000 glyphs mỗi thứ hai, trong khi GDI + mã của tôi đường dẫn là hiển thị khoảng 16.000 glyphs mỗi giây.

Ví dụ khác là vẽ đường kẻ.GDI + hỗ trợ anti-aliased dòng/đa giác và hình tròn/vẽ hình elip, trong khi GDI không:

alt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art33(en-us,VS.85).pngalt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art34(en-us,VS.85).png

alt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art36(en-us,VS.85).png

+3

Nhưng để trả lời câu hỏi của bạn trực tiếp hơn: GDI + là hoàn toàn mới. Điều này thực sự trở thành một vấn đề vì nó chậm hơn GDI (tức là không tăng tốc phần cứng) và hiển thị văn bản khác với GDI (dẫn đến văn bản có thể khác trong các phần khác nhau của ứng dụng .NET). Nó không phải là một wrapper COM xung quanh GDI, trên thực tế nó thậm chí không COM. Đó là phẳng C api. Microsoft đã tạo một tập hợp các lớp C++ đơn giản hóa việc gọi các hàm phẳng. 'System.Drawing' trong .NET là một tập các lớp cũng gọi các hàm phẳng. –

9

GDI + được xây dựng trên GDI và thêm một số tính năng khác. Ví dụ: GDI + thêm hỗ trợ cho độ trong suốt, kéo giãn bitmap chống răng cưa, v.v ...

GDI + chủ yếu là API dựa trên đối tượng và GDI là hàm api. Hầu hết các chức năng trong GDI + không được tối ưu hóa phần cứng (có phần mềm được xử lý), để tương phản với GDI. Ví dụ, trong GDI, BitBlt được xử lý trực tiếp bằng phần cứng. Chức năng vẽ bitmap GDI + không.

GDI + là một API mạnh mẽ, nhưng hãy cẩn thận với hiệu suất của nó.

GDI + có sẵn trong C++, COM và .NET

8

GDI + không phải là COM. GDI + có một API "phẳng" bên dưới có thể gọi được từ C (hoặc bất kỳ ngôn ngữ nào khác) và một trình bao bọc hướng đối tượng trong C++ mà chỉ cần gọi API phẳng. Cũng có các trình bao bọc trong .NET (System.Drawing) và Delphi cũng chỉ gọi API phẳng. Nó hoạt động hoàn toàn khác với GDI ở chỗ bạn không thiết lập các đối tượng (bút, cọ vẽ, phông chữ) thành ngữ cảnh thiết bị, mà chuyển chúng tới các hàm vẽ. Nó không có nhiều điểm chung với GDI. Tôi không biết mặc dù việc thực hiện GDI + sử dụng GDI - nhưng nó có khả năng không, bởi vì nó có rất nhiều tính năng mà không có sẵn trong GDI.

Thật không may, nó chậm hơn GDI. Nó rất mạnh mẽ.

Như decasteljau đã chỉ ra trong thời gian chờ đợi, các vấn đề hiệu suất có thể đến từ thực tế là nó không được hiển thị trong phần cứng, không giống như OpenVG hoặc WPF. Gần đây tôi đã sử dụng XNA vì điều đó cho một ứng dụng thời gian thực đồ họa.

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