Tôi không hiểu sự khác biệt giữa QImage và QPixmap là gì, chúng dường như cung cấp cùng một chức năng. Khi nào tôi nên sử dụng QImage và khi nào tôi nên sử dụng QPixmap?
Tôi không hiểu sự khác biệt giữa QImage và QPixmap là gì, chúng dường như cung cấp cùng một chức năng. Khi nào tôi nên sử dụng QImage và khi nào tôi nên sử dụng QPixmap?
Câu trả lời:
Dễ dàng trả lời bằng cách đọc tài liệu trên QImage và QPixmap :
Lớp QPixmap là một biểu diễn hình ảnh ngoài màn hình có thể được sử dụng như một thiết bị sơn.
Lớp QImage cung cấp một biểu diễn hình ảnh độc lập với phần cứng cho phép truy cập trực tiếp vào dữ liệu pixel và có thể được sử dụng như một thiết bị sơn.
Chỉnh sửa: Ngoài ra, từ câu trả lời của @ Dave:
Bạn không thể thao tác QPixmap bên ngoài luồng GUI, nhưng QImage không có hạn chế như vậy.
Và từ @Arnold:
Dưới đây là một bản tóm tắt ngắn thường (không phải lúc nào cũng áp dụng):
- Nếu bạn định xử lý một hình ảnh, sửa đổi hình ảnh, thay đổi pixel trên hình ảnh đó, v.v., hãy sử dụng QImage.
- Nếu bạn định vẽ cùng một hình ảnh nhiều lần trên màn hình, hãy chuyển đổi hình ảnh đó thành QPixmap.
Có một loạt các bài viết tại Qt Labs giải thích rất nhiều về hệ thống đồ họa Qt. Bài viết này nói riêng có một phần trên QImage
vs QPixmap
.
Dưới đây là một bản tóm tắt ngắn thường (không phải lúc nào cũng áp dụng):
QImage
.QPixmap
.Một điểm khác biệt quan trọng là bạn không thể tạo hoặc thao tác QPixmap
trên bất kỳ thứ gì ngoài luồng GUI chính. Tuy nhiên, bạn có thể tạo và thao tác các QImage
thể hiện trên các luồng nền và sau đó chuyển đổi chúng sau khi chuyển chúng trở lại luồng GUI.
Quan trọng trong môi trường công nghiệp:
QPixmap được lưu trữ trên thẻ video để hiển thị. Không phải QImage.
Vì vậy, nếu bạn có một máy chủ đang chạy ứng dụng và một trạm khách thực hiện việc hiển thị, thì điều đó rất quan trọng về mặt sử dụng mạng.
Với Pixmap, Redraw chỉ bao gồm việc gửi thứ tự để vẽ lại (một vài byte) qua mạng.
Với QImage, nó bao gồm gửi toàn bộ hình ảnh (khoảng vài MB).
QPixmap
là một "đối tượng hình ảnh" mà việc pixel
biểu diễn không liên quan đến mã của bạn, Do đó QPixmap được thiết kế và tối ưu hóa để hiển thị hình ảnh trên màn hình hiển thị, nó được lưu trữ trên XServer khi sử dụng X11, do đó vẽ QPixmap trên XWindow nhanh hơn nhiều so với bản vẽ QImages, vì dữ liệu đã có trên máy chủ và sẵn sàng sử dụng.
Khi nào sử dụng QPixmap : Nếu bạn chỉ muốn vẽ một hình ảnh hiện có (biểu tượng .. nền .. vv) đặc biệt nhiều lần, hãy sử dụng QPixmap.
QImage là một "mảng pixel trong bộ nhớ" của mã máy khách , QImage được thiết kế và tối ưu hóa cho I / O cũng như để truy cập và thao tác trực tiếp pixel.
Khi nào sử dụng QImage : Nếu bạn muốn vẽ, bằng Qpaint, hoặc thao tác với pixel hình ảnh.
QBitmap chỉ là một lớp con QPixmap thuận tiện đảm bảo độ sâu là 1, ảnh pixmap đơn sắc (độ sâu 1 bit) của nó. Cũng giống như QPixmap, QBitmap được tối ưu hóa để sử dụng chia sẻ dữ liệu ngầm.