Qt图像处理

图像处理

图片加载

图片加载
#define PixMaxSize 4000*3000*2//10000*10000//4000*3000
    /**
     * @brief 设置图片
     * @param image: 要展示图片的地址
     */
void setImage(const QString & image){
{
    QImageReader imgReader;
    imgReader.setFileName(image);
    if (!imgReader.canRead())
    {

    }
    else{
        m_imageAttributes.width = imgReader.size().width();
        m_imageAttributes.height = imgReader.size().height();
        double sizeSum = imgReader.size().width()*imgReader.size().height();
//        int maxSum = PixMaxSize*sin(45.0)*sin(45.0);
        int maxSum = PixMaxSize/2;
        if(sizeSum > maxSum){
            // 要求比例
            double requireProportion = qSqrt(maxSum*1.00/sizeSum);
            int width = imgReader.size().width()*requireProportion;
            int height = imgReader.size().height()*requireProportion;
            // 缩略图按比例缩放
            imgReader.setScaledSize(QSize(width,height));
        }

        // 读取图片
        QImage img = imgReader.read();
        // 需要转格式,不然QPainter无法绘制
        if (img.format() == QImage::Format_Indexed8) {
            img = img.convertToFormat(QImage::Format_ARGB32);
        }
        if(!img.isNull())
        {
            m_image = img;
            m_originalImage = img;
            m_widget->setImage(img);
        }
    }

}

图片按比例加载
    ///
    /// \brief picScale       图片等比例缩放
    /// \param pix                  图片
    /// \param path                 路径
    /// \param requiredImageSize    尺寸
    /// \param supportIcon          图片找不到,是否支持显示图标
    ///
    static void picScale(QPixmap &pix, QString path, QSize requiredImageSize, bool supportIcon = true)
{
    // QImage/QPixmap 的大小限制为32767x32767 像素
    QImageReader imgReader;
    imgReader.setFileName(path);
    if (!imgReader.canRead())
    {

    }
    int nThumbnailWidth  = requiredImageSize.width();
    int nThumbnailHeight = requiredImageSize.height();

    // 图片实际尺寸
    QSize sizeImage = imgReader.size();
    // 缩放后比例
    QSize sizeImageEnd = sizeImage;

    // 要求比例
    double requireProportion = requiredImageSize.width()*1.00/requiredImageSize.height();
    // 实际比例
    double actualProportion = sizeImage.width()*1.00/sizeImage.height();
    if(requireProportion < actualProportion){
        sizeImageEnd.setWidth(requiredImageSize.width());
        sizeImageEnd.setHeight(requiredImageSize.width()/actualProportion);
    }
    else{
        sizeImageEnd.setWidth(requiredImageSize.height()*actualProportion);
        sizeImageEnd.setHeight(requiredImageSize.height());
    }
    // 缩略图按比例缩放
    imgReader.setScaledSize(sizeImageEnd);

    // 读取图片
    pix = QPixmap::fromImage(imgReader.read());
    if(!pix.isNull()){
    }
    else {
        if(supportIcon){
           // 获取系统图标
           QFileIconProvider provider;
           QIcon icon = provider.icon(path);
           pix = icon.pixmap(QSize(nThumbnailWidth,nThumbnailHeight));
        }
        
        pix = pix.scaled(sizeImageEnd, Qt::KeepAspectRatio, Qt::SmoothTransformation);
    }

}

图片转Base64
    ///
    /// \brief pixtoBase64          图片转base64
    /// \param pix
    /// \return
    ///
QByteArray pixtoBase64(QPixmap pix, QString type = "png")
{
    QByteArray bytearray;
    QBuffer buffer(&bytearray);
    buffer.open(QIODevice::WriteOnly);
    pix.save(&buffer,type.toUtf8().data());
    QByteArray img64 = bytearray.toBase64();//base64编码
    return img64;
}
Base64转图片
    ///
    /// \brief base64toPix          base64转图片
    /// \param base64
    /// \return
    ///
QByteArray CommonFunc::imagetoBas
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值