2009-07-29 42 views
13

Tôi đã tìm kiếm một thư viện vẽ 2D đa nền tảng tốt có thể được gọi từ C++ và có thể được sử dụng để vẽ một số hình học khá đơn giản; dòng, hình chữ nhật, hình tròn và văn bản (ngang và dọc) cho một số biểu đồ và lưu đầu ra thành PNG.Thư viện vẽ đa nền tảng

Tôi nghĩ rằng một gói thương mại sẽ thích hợp hơn nguồn mở vì chúng tôi không muốn phải lo lắng về các vấn đề cấp phép (trừ khi có điều gì đó với giấy phép kiểu BSD không có điều khoản tín dụng). Tôi đã nhìn vào Cairo Graphics có vẻ đầy hứa hẹn, nhưng việc hiển thị văn bản trông giống như crap ra khỏi hộp, và nâng cấp văn bản back-end đưa chúng ta vào đất giấy phép u ám.

Tôi cần nó cho Windows, Mac và Linux. Tốt hơn là một cái gì đó khá nhẹ và đơn giản để tích hợp. Tôi đã nghĩ về Qt nhưng đó là cách quá nặng cho ứng dụng của chúng tôi.

Mọi ý tưởng về điều này sẽ thật tuyệt vời.

+2

Có, thật đáng tiếc là 'QImage' và 'QPainter' được chôn trong' QtGui' thay vì trong một 'QtPainting' lib riêng biệt. Khi họ chia nhỏ các libs trong Qt 4.0, chúng không thực sự có thể sử dụng được nếu không có 'QApplication', nhưng ngày nay bạn có thể sử dụng chúng trong các luồng riêng biệt, vì vậy một' QtPainting' sẽ tạo ra rất nhiều ý nghĩa, IMO. Hãy đợi Qt 5 :) –

Trả lời

12

Hãy thử Anti-Grain Geometry. Từ mô tả:

Hình học chống hạt (AGG) là Thư viện đồ họa miễn phí, mã nguồn mở, được viết bằng tiêu chuẩn công nghiệp C++. Các điều khoản và điều kiện sử dụng AGG được mô tả trên trang Giấy phép. AGG không phụ thuộc vào bất kỳ API hoặc công nghệ đồ họa nào. Về cơ bản, bạn có thể nghĩ AGG như một công cụ dựng hình tạo ra các ảnh pixel trong bộ nhớ từ một số dữ liệu vectơ. Nhưng tất nhiên, AGG có thể làm được nhiều hơn thế. Những ý tưởng và triết lý của AGG là:

  • Anti-Aliasing.
  • Độ chính xác của pixel phụ.
  • Chất lượng cao nhất có thể.
  • Hiệu suất cao.
  • Tính độc lập và khả năng tương thích của nền tảng.
  • Tính linh hoạt và khả năng mở rộng.
  • Thiết kế gọn nhẹ.
  • Độ tin cậy và độ ổn định (bao gồm cả độ ổn định số).
+0

Cảm ơn, điều này có vẻ là đúng con hẻm của tôi, tôi sẽ kiểm tra nó. – Gerald

+0

Chỉ một ngày khác, tôi nhận thấy thiết bị GPS của tôi đang sử dụng AGG để hiển thị bản đồ. Khéo léo! –

+5

Là một FYI, tôi đã cố gắng liên tục liên hệ với các nhà phát triển của AGG liên quan đến việc xin giấy phép thương mại và không bao giờ nhận được phản hồi. Nó cũng đã được 2 năm kể từ khi bất kỳ tin tức đã được đăng trên trang web, vì vậy tôi giả sử nó không còn được hỗ trợ. Vì vậy, tôi đã kết thúc chỉ cần lăn giải pháp tùy chỉnh của riêng tôi trên 3 nền tảng mà tôi cần. Nó vẫn có thể là một giải pháp tốt nếu sử dụng phiên bản cũ hơn với giấy phép không GPL, vì vậy tôi sẽ để điều này là câu trả lời hay nhất, nhưng tôi không muốn giải quyết với một thư viện không được hỗ trợ. – Gerald

1
+2

Tôi đã sử dụng cả SDL và SFML, và tôi sẽ khuyên bạn nên sử dụng SFML trên SDL. Nó sử dụng các cấu trúc C++ (OOP, các chồng chức năng, ...), và nó dễ dàng hơn và thú vị hơn nhiều. Với tôi nhược điểm duy nhất có thể là nó vẫn là một thư viện gần đây so với SDL, vì vậy nó có thể không ổn định. –

+2

cũng vậy, SDL không có chức năng vẽ các nguyên thủy mà anh ta liệt kê. Bạn phải tìm mã do người khác thực hiện hoặc tự viết mã cho họ. –

2

Antigrain làm chất lượng cao render nguyên thủy và dường như có thể làm cho loại phông chữ đúng và có một giấy phép thương mại cung cấp theo yêu cầu.

http://www.antigrain.com/

0
+0

... không phải là thư viện. – cubuspl42

+0

Vui lòng giải thích định nghĩa của bạn về thư viện. –

+0

Đó là thứ có mã. OpenGL chỉ là một API tiêu chuẩn được sử dụng để nói chuyện với GPU. Bạn không thể liên kết với nó, bạn không thể mua nó, bạn không thể tải xuống. Nhân tiện, gọi các hàm OpenGL trực tiếp thực sự không bao giờ là nền tảng chéo. Các thư viện như SDL hoặc SFML là. – cubuspl42

1

Các bạn đã thử FLTK? Nó có trọng lượng nhẹ, đa nền tảng, hỗ trợ đồ họa 2D/3D và đi kèm với bộ tiện ích con tốt (bao gồm thành phần biểu đồ). API đơn giản và dễ hiểu.

0

Tôi sẽ tham gia AGG hoặc Cairo.

1

Ngoài ra còn có libgd - đơn giản, nhưng được viết tốt.

Liên quan đến Cairo Graphics, tôi không thể tin rằng nó renders text trông có vẻ xấu. Nếu bạn đặc biệt lo ngại về hiển thị văn bản, State of the Text Rendering từ tháng 1 năm 2010 cung cấp tổng quan khá tốt.

+0

Tôi nên rõ ràng hơn một chút; Cairo Graphics render văn bản lớn tốt, nhưng tôi cần phải hiển thị các nhãn văn bản nhỏ trên biểu đồ và đồ thị, và đó là nó trông giống như crap bởi vì nó sử dụng đồ họa vector để render nó. Miễn là văn bản đủ lớn cho ít nhất 2 pixel, tất cả mọi thứ xung quanh đều ổn, nhưng hãy thử vẽ một số văn bản ở cỡ chữ 8 hoặc hơn và xem bạn có đọc được không;) – Gerald

1

Tôi sử dụng CImg: nền tảng chéo (chứa tệp tiêu đề duy nhất), đơn giản, súc tích. PNG không được hỗ trợ nguyên bản nhưng có thể được xử lý nếu ImageMagick được cài đặt (xem supported formats).

Xem thêm điều này related question.

+0

Tôi rất ấn tượng với CImg. Cho tới nay, việc tích hợp một số thư viện mà tôi đã chơi gần nhất là dễ nhất. –

6

Một số khác: Skia. Được sử dụng trong Android và Chrome, dưới sự phát triển tích cực, tăng tốc HW.

1

Bạn có thể sử dụng Allegro 5 (vì SDL và SFML được đề cập). Điều này cung cấp tất cả các nền tảng bạn yêu cầu (và nhiều hơn nữa) và có thể hiển thị hình dạng và lưu vào PNG. Phiên bản 5 có khả năng tăng tốc phần cứng và tăng tốc phần cứng. Với bất kỳ thư viện nền tảng cấp thấp nào, bạn phải tìm giải pháp lập biểu đồ của riêng bạn.

Tôi đặt một số ghi chú on my blog về Allegro và sử dụng nó trên Mac.

+0

Điều này trông rất đẹp. Bạn có biết nếu nó có thể sử dụng nó trong một ứng dụng có quản lý cửa sổ riêng của nó thay vì sử dụng quản lý cửa sổ Allegro? – Gerald

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