Я не понимаю, в чем разница между QImage и QPixmap, похоже, они предлагают ту же функциональность. Когда мне следует использовать QImage, а когда - QPixmap?
Я не уверен, понимаю ли я ваш вопрос, но мне показалось, что в документации это довольно ясно: «QImage разработан и оптимизирован для ввода-вывода, а также для прямого доступа к пикселям и манипуляции с ними, а QPixmap разработан и оптимизирован для отображения изображений. на экране." doc.qt.nokia.com/latest/qpixmap.html#details
cgmb
1
да уж! Я узнал это, но не очень хорошо понимаю, например, оптимизирован для ввода-вывода и оптимизирован для отображения, это разница, которую изображение показывает на платформе различия? .. Не могли бы вы помочь мне сделать шаг, чтобы объяснить .. спасибо ..
Мистер Ту,
Я все еще не уверен на 100%, что понимаю, что вы имеете в виду, но если вы используете QWidgets, вы можете отобразить это в QLabel. Если вы используете QGraphicsView, вы можете отобразить его в QGraphicsPixmapItem. Если вы используете QML, элемент Image сделает все за вас.
cgmb
Скажу по-другому, что такое Движок, в чем его работа? когда это использовать?
Мистер Ту,
Ответы:
55
Легко ответить, прочитав документацию по QImage и QPixmap :
Класс QPixmap - это представление изображения за пределами экрана, которое можно использовать в качестве устройства рисования.
Класс QImage обеспечивает аппаратно-независимое представление изображения, которое обеспечивает прямой доступ к данным пикселей и может использоваться в качестве устройства рисования.
Изменить: Кроме того, из ответа @Dave:
Вы не можете манипулировать QPixmap вне потока графического интерфейса пользователя, но QImage не имеет такого ограничения.
И от @Arnold:
Вот краткое изложение, которое обычно (не всегда) применимо:
Если вы планируете манипулировать изображением, изменять его, изменять пиксели на нем и т. Д., Используйте QImage.
Если вы планируете рисовать одно и то же изображение на экране более одного раза, преобразуйте его в QPixmap.
спасибо за вашу помощь ... каков общий процесс, при котором QPixmpa и QImage загружают изображение ... что это в памяти ... спасибо ..
Mr.Tu
Я не уверен, что вы пытаетесь сделать, но в этом вопросе я демонстрирую, как загрузить данные YV12 с диска, преобразовать их в RGB с помощью шейдера фрагментов GLSL, а затем отобразить их на экране внутри QImage. Думаю, я мог бы указать вам правильное направление, если бы вы более четко понимали, чего пытаетесь достичь.
karlphillip
16
Это действительно на что-нибудь отвечает?
semisecure
7
Просто копировать документацию и ответы других людей не имеет смысла.
Вячеслав Кроилов
48
В Qt Labs есть хорошая серия статей, которые многое объясняют о графической системе Qt. В этой статье , в частности , имеет раздел QImageVS. QPixmap.
Вот краткое изложение, которое обычно (не всегда) применимо:
Если вы планируете манипулировать изображением, изменять его, изменять пиксели на нем и т. Д., Используйте файл QImage.
Если вы планируете рисовать одно и то же изображение на экране несколько раз, преобразуйте его в формат QPixmap.
благодарю вас. Этот отрывок говорит нам: есть два разных способа загрузки изображения: растровый и OpenGL? верно?
Мистер Ту
Я не совсем понимаю вопрос. Ни "растр", ни "OpenGL" конкретно не представляют способы загрузки изображения.
Арнольд Спенс
37
Одним из важных отличий является то, что вы не можете создавать или управлять QPixmapчем-либо, кроме основного потока графического интерфейса. Однако вы можете создавать QImageэкземпляры и управлять ими в фоновых потоках, а затем преобразовывать их после передачи обратно в поток графического интерфейса.
QPixmap хранится на видеокарте, выполняющей отображение. Не QImage.
Поэтому, если у вас есть сервер, на котором выполняется приложение, и клиентская станция, выполняющая отображение, это очень важно с точки зрения использования сети.
При использовании Pixmap перерисовка заключается в отправке по сети только команды на перерисовку (несколько байтов).
С QImage он заключается в отправке всего изображения (около нескольких МБ).
QPixmap
- это «объект изображения», pixelпредставление которого не имеет значения в вашем коде. Таким образом, QPixmap разработан и оптимизирован для рендеринга изображений на экране дисплея, он хранится на XServer при использовании X11, поэтому рисование QPixmap в XWindow происходит намного быстрее, чем рисование. QImages, поскольку данные уже находятся на сервере и готовы к использованию.
Когда использовать QPixmap : Если вы просто хотите рисовать существующее изображение (значок ... фон ... и т.д.) особенно часто, то используйте QPixmap.
QImage - это «массив пикселей в памяти» клиентского кода, QImage разработан и оптимизирован для ввода-вывода, а также для прямого доступа к пикселям и манипулирования ими.
Когда использовать QImage : если вы хотите рисовать с помощью Qpaint или манипулировать пикселями изображения.
QBitmap - это всего лишь удобный подкласс QPixmap, обеспечивающий глубину 1, это монохромное (глубина 1 бит) растровое изображение. Как и QPixmap, QBitmap оптимизирован для использования неявного обмена данными.
QPicture - это устройство рисования, которое записывает и воспроизводит команды QPainter - ваш рисунок -
Ответы:
Легко ответить, прочитав документацию по QImage и QPixmap :
Изменить: Кроме того, из ответа @Dave:
И от @Arnold:
источник
В Qt Labs есть хорошая серия статей, которые многое объясняют о графической системе Qt. В этой статье , в частности , имеет раздел
QImage
VS.QPixmap
.Вот краткое изложение, которое обычно (не всегда) применимо:
QImage
.QPixmap
.источник
Одним из важных отличий является то, что вы не можете создавать или управлять
QPixmap
чем-либо, кроме основного потока графического интерфейса. Однако вы можете создаватьQImage
экземпляры и управлять ими в фоновых потоках, а затем преобразовывать их после передачи обратно в поток графического интерфейса.источник
Важно в промышленных условиях:
QPixmap хранится на видеокарте, выполняющей отображение. Не QImage.
Поэтому, если у вас есть сервер, на котором выполняется приложение, и клиентская станция, выполняющая отображение, это очень важно с точки зрения использования сети.
При использовании Pixmap перерисовка заключается в отправке по сети только команды на перерисовку (несколько байтов).
С QImage он заключается в отправке всего изображения (около нескольких МБ).
источник
QPixmap - это «объект изображения»,
pixel
представление которого не имеет значения в вашем коде. Таким образом, QPixmap разработан и оптимизирован для рендеринга изображений на экране дисплея, он хранится на XServer при использовании X11, поэтому рисование QPixmap в XWindow происходит намного быстрее, чем рисование. QImages, поскольку данные уже находятся на сервере и готовы к использованию.QImage - это «массив пикселей в памяти» клиентского кода, QImage разработан и оптимизирован для ввода-вывода, а также для прямого доступа к пикселям и манипулирования ими.
QBitmap - это всего лишь удобный подкласс QPixmap, обеспечивающий глубину 1, это монохромное (глубина 1 бит) растровое изображение. Как и QPixmap, QBitmap оптимизирован для использования неявного обмена данными.
источник