Привет, я занимаюсь разработкой приложения blackberry10. Внутри приложения у меня есть два изображения, и мне просто нужно объединить эти два изображения в одно изображение. В каскадах нет функции объединять их. Когда я разместил это на форуме разработчиков Blackberry, мне посоветовали использовать функции QImage и QPainter в qt для объединения двух изображений в одно. Я не знаю, как использовать эти функции. Может ли кто-нибудь помочь мне с этим кодом?
Вы были направлены в нужное место, и, действительно, QPainter, вероятно, сделает то, что вы хотите, но ваш вопрос неоднозначен, когда вы заявляете, что хотите «объединить эти два изображения». Это может означать, что вы хотите половину одного и половины другого, или вы хотите смешать их каким-то образом, что, вероятно, более вероятно.
Qt предоставляет несколько режимов компоновки, которые обеспечивают разные эффекты. Вот исходный код примера композиции который предоставляет Qt, который показывает вам, что он может делать, и вы можете видеть из исходного кода, как именно нужно комбинировать изображения.
В частности, вы увидите, что первое изображение отображается (drawBase ()), затем в QPainter устанавливается режим композиции, а второе изображение отображается (drawSource ()).
Проще говоря, нарисуйте первое изображение, а затем объедините второе, как это: —
QPainter p(&destImage);
p.setCompositionMode(mode);
p.drawImage(0, 0, sourceImage);
Как вы можете видеть из Документация Qt, Существует довольно много разных режимов композиции, которые «сливают» ваши изображения с различными эффектами.
Вы можете сделать что-то подобное с QPainter для простого альфа-смешивания. Этот код может быть легко адаптирован к чему-то еще:
QImage surface(...);
QPainter p(&surface);
p.setCompositionMode(QPainter::CompositionMode_Source);
// p.setBrush(LinearGradient from solid to transparent right to left)
p.drawRect(surface.size());
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
p.drawImage(image1);
p.end();
p.begin(image2);
p.drawImage(surface);
p.end();
Это очень полезная часть документации с иллюстрацией наглядно.
Если бы вы использовали шейдеры OpenGL, это было бы намного проще, хотя opengl имеет некоторую поддержку для этого. Я бы порекомендовал рассмотреть возможность перехода к этому в будущем, если вы не находитесь на ограниченной платформе.
Обратите внимание, что есть также некоторая поддержка альфа-канала для QImages, но это, вероятно, не лучший вариант для использования здесь, поэтому воспринимайте это как «из любопытства»:
QImage::Format_ARGB32_Premultiplied