1. 把字符串绘制在QPixmap上
QPixmap MainWindow::text2Pixmap(QString text)
{
QFontMetrics fmt(m_font);
QPixmap result(fmt.width(text), fmt.height());
QRect rect(0,0,fmt.width(text), fmt.height());
result.fill(Qt::transparent);
QPainter painter(&result);
painter.setFont(m_font);
painter.setPen(QColor(255,143,36));
//painter.drawText(const QRectF(fmt.width(text), fmt.height()),Qt::AlignLeft, text);
painter.drawText((const QRectF)(rect),text);
return result;
}
QSize size(200,200); //指定图片大小;
QImage image(size,QImage::Format_ARGB32); //以ARGB32格式构造一个QImage
//image.fill(qRgba(0,0,0,100));//填充图片背景,120/250为透明度
QPainter painter(&image); //为这个QImage构造一个QPainter
painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);
//设置画刷的组合模式CompositionMode_SourceOut这个模式为目标图像在上。
//改变组合模式和上面的填充方式可以画出透明的图片。
//改变画笔和字体
QPen pen = painter.pen();
pen.setColor(Qt::red);
QFont font = painter.font();
font.setBold(true);//加粗
font.setPixelSize(50);//改变字体大小
painter.setPen(pen);
painter.setFont(font);
painter.drawText(image.rect(),Qt::AlignCenter,"Hello");//将Hello写在Image的中心
2. 对图片进行水平拼接
//多张图片拼接合成一张图片
QPixmap MainWindow::pinjie(QVector<QPixmap> image)
{
int image_width=0;
int max_height = 0;
QVector <QPixmap > ::iterator it;
for(it = image.begin();it!=image.end();++it)
{
int width = (*it).width();
image_width += width;
image_width +=5;
if((*it).height()>max_height)
{
max_height =(*it).height();
}
}
QPixmap result_image_h(image_width,max_height);
result_image_h.fill(Qt::transparent);
QPainter painter_h;
painter_h.begin(&result_image_h);
int x_number=0;
for(it = image.begin();it!=image.end();++it)
{
painter_h.drawPixmap(x_number,0,(*it));
x_number += (*it).width();
x_number +=5;
}
painter_h.end();
return result_image_h;
}
3. 把一张图片绘制在空白图片上
QPixmap MainWindow::zoomOutPix(QPixmap pix ,int addWidth, int addHeight)
{
// addWidth pix增加的宽度,addHeight pix增加的高度
QPixmap res(pix.width() + addWidth, pix.height() + addHeight);
res.fill(Qt::transparent);
QPainter painter(&res);
painter.drawPixmap(addWidth/2, addHeight/2, pix.width(), pix.height(), pix);
return res;
}
4. 把一张图片绘制在另外一张图片上
//一张图片绘制在另外一张图片上
QPixmap MainWindow::dijia(QPixmap p1, QPixmap p2)
{
//p1作为底片, p2绘制在p1图片上
QPainter painter(&p1);
painter.drawPixmap(0,0,p2.width(),p2.height(), p2);
return p1;
}
本文介绍了使用QPainter在QPixmap上进行图像操作,包括字符串绘制、图片水平拼接、图片覆盖以及多图拼接等技术,详细展示了如何利用Qt库进行图像处理。
445

被折叠的 条评论
为什么被折叠?



