QT - 圖像處理 ( 6 ) - QPainter 對 QPixmap 圖像拼接、覆蓋、寫文字

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;
 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章