2013-09-25 1 views
2

Привет, я разрабатываю приложение blackberry10. Внутри приложения у меня есть два изображения, и мне просто нужно объединить эти два изображения в одно изображение. В Cascades нет функции для их комбинирования. Когда я разместил это на форуме разработчиков Blackberry, мне было рекомендовано использовать QImage и QPainter-функции в qt, чтобы объединить два изображения в один. Я не знаю, как использовать эти функции. Может кто-нибудь помочь мне с этим кодом?Как объединить два изображения в один, используя QImage и QPainter в qt?

+0

В каком формате вы хотите объединить свои изображения? Сделайте их черепичными, наложенными, вертикальными, горизонтальными? – vahancho

+0

Вы в порядке с простым альфа-смешиванием? – lpapp

ответ

3

Вы можете сделать что-то подобное с 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(); 

Это очень useful part документации с иллюстрацией визуально.

Если вы использовали шейдеры OpenGL, это было бы намного проще, хотя opengl получил некоторую поддержку для этого. Я бы рекомендовал рассмотреть возможность перехода на это в будущем, если вы не находитесь на ограниченной платформе.

Обратите внимание, есть также некоторая поддержка альфа-канала для QImages, но это, вероятно, не лучше использовать здесь, так что принять его как «вне любопытства»:

QImage::Format_ARGB32_Premultiplied 
3

Вы были направленный в нужное место, и действительно, QPainter, вероятно, сделает то, что вы хотите, но ваш вопрос неоднозначен, когда вы заявляете, что хотите «объединить эти два изображения». Это может означать, что вы хотите половину одной половины другого, или вы хотите каким-то образом их смешать, что, вероятно, более вероятно.

Qt предоставляет несколько режимов композиции, которые обеспечивают различные эффекты. Here's the source code to the composition example, который предоставляет Qt, который показывает вам, что он может делать, и вы можете видеть, начиная с исходного кода, точно, как объединить изображения.

В частности, вы увидите, что первое изображение визуализируется (drawBase()), тогда режим композиции устанавливается на QPainter, а второе изображение отображается (drawSource()).

Проще говоря, сделать первый снимок, а затем объединять второй, как это: -

QPainter p(&destImage); 
p.setCompositionMode(mode); 
p.drawImage(0, 0, sourceImage); 

Как вы можете видеть из Qt documentation, существует довольно много различных режимов композиции, которые будут «слияние» ваш изображения с различными эффектами.