Qt QPixmap旋转任意角度

24 篇文章 1 订阅
19 篇文章 0 订阅

效果

在这里插入图片描述

使用

QPixmap pix2 = rotateImageWithTransform(pix1, 30);

源码


// 旋转图片任意角度
QPixmap rotateImageWithTransform(const QPixmap &src, int angle)
{
    QMatrix matri;
    //迁移到中心
    matri.translate(src.width()/2.0, src.height()/2.0);
    //中心旋转
    matri.rotate(angle);
    //回退中心
    matri.translate(-src.width()/2.0, -src.height()/2.0);
    //执行坐标映射变化
    //旋转后图像大小变化了 需要提前进行裁剪 如果在旋转后裁剪
    //则需要计算使用三角函数计算
    //中心偏移
    int cubeWidth = qMax(src.width(),src.height());
    QRect cubeRect(0,0,cubeWidth,cubeWidth);
    cubeRect.moveCenter(src.rect().center());

    auto retImg = src.copy(cubeRect);
    retImg = retImg.transformed(matri,Qt::SmoothTransformation);
//    return retImg;

    QImage imgT = retImg.toImage();
    // Create resulting image with specific background.
    QImage img(imgT.size(), QImage::Format_ARGB32);
    img.fill(Qt::white); // Set the red background
    QPainter p(&img);
    p.drawImage(0, 0, imgT);

    return QPixmap::fromImage(img);
}
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好! 为了在Qt的窗口中显示图片,您可以使用QLabel控件和QPixmap类来实现。 以下是一个示例代码: ``` #include <QApplication> #include <QLabel> #include <QPixmap> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建一个QLabel控件 QLabel *label = new QLabel(); // 创建一个QPixmap对象并加载图像 QPixmap pixmap(":/images/image.jpg"); // 将QPixmap对象设置为QLabel的图像 label->setPixmap(pixmap); // 调整QLabel的大小以适应图像 label->setFixedSize(pixmap.size()); // 显示QLabel label->show(); return a.exec(); } ``` 在此示例中,图像被加载到QPixmap对象中,然后该对象被设置为QLabel的图像。最后,QLabel的大小被调整以适应图像,并显示出来。 请注意,示例代码中使用了一个资源文件来加载图像。您可以在Qt项目中创建一个.qrc文件,并在其中添加图像文件,以便能够在应用程序中访问它们。 希望这可以帮助到您! ### 回答2: Qt是一个流行的跨平台应用程序开发框架,可以帮助开发者快速创建各种类型的图形用户界面应用程序。要在扇形区域内显示图片,可以使用Qt的绘图功能结合数学计算来实现。 首先,我们需要创建一个QWidget或QGraphicsView来承载绘图。然后,使用绘图工具类QPainter来在该组件上进行绘制。 为了在扇形区域内显示图片,我们需要计算扇形的位置和大小。假设我们有一个圆心坐标和半径,以及一个起始角度和扇形角度。我们可以使用三角函数来计算扇形的顶点位置。然后,使用QPainter的drawPie方法来绘制扇形。 绘制图片时,可以使用QPainter的drawPixmap方法。首先,需要根据图片和扇形的大小来计算合适的图片大小,可以使用QPixmap的scaled方法来进行缩放。然后,使用drawPixmap方法将图片绘制在扇形区域内。 绘制完成后,可以将该QWidget或QGraphicsView添加到应用程序界面中,让用户可以看到绘制的结果。 总结来说,要在扇形区域内显示图片,首先需要计算出扇形的位置和大小,然后使用绘图工具类QPainter来绘制扇形和图片。通过Qt的绘图功能和数学计算,可以轻松地实现这一需求。 ### 回答3: 在Qt中,要实现在扇形区域内显示图片,可以通过以下步骤: 1. 创建一个QWidget或QGraphicsView作为父容器。 2. 在父容器中重写绘制事件的函数paintEvent(QPaintEvent *event)。 3. 在paintEvent函数中,使用QPainter来绘制扇形区域的背景。 4. 通过QPainter的drawPie函数绘制扇形区域,指定起始角度和扇形角度。 5. 调用QPainter的drawPixmap函数,将图片绘制在扇形区域内。 6. 调用父容器的update()函数,触发重绘事件,以显示绘制的内容。 以下是一个简单的示例代码: ```cpp // 在父容器的头文件中声明一个成员变量用于存储图片 private: QPixmap m_pixmap; // 重写父容器的绘制事件函数 void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); // 绘制扇形区域的背景 painter.setBrush(Qt::white); painter.drawPie(rect(), 30, 120); // 起始角度和扇形角度可根据实际需求调整 // 在扇形区域内绘制图片 int width = m_pixmap.width(); int height = m_pixmap.height(); QRectF targetRect(rect().center().x() - width/2, rect().center().y() - height/2, width, height); painter.drawPixmap(targetRect, m_pixmap); } // 调用父容器的update()函数来触发重绘事件 void MyWidget::showImage() { update(); } ``` 在使用上述代码时,需要先加载图片并存储到m_pixmap中,然后调用showImage函数即可显示图片在扇形区域内。需要注意的是,代码中的绘制扇形区域的起始角度、扇形角度以及图片的位置和大小的计算可以根据实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值