QImage图片裁剪

本文探讨了两种将jpg图片从1280*720缩小到640*480的方法:一是裁剪原始图片中间部分,二是按比例缩放图片。虽然两者都能达到目的,但缩放方法在内存占用上更优,仅加载所需尺寸的图片,降低了内存消耗。
摘要由CSDN通过智能技术生成

背景:将分辨率为1280*720的jpg图片变小为成640*480的图片

方法一:裁剪原始图片中间部分,变小后的图片是原始图片的一部分

        QString rawfile="***"; //原始图片  
        QString dstfile;       //裁剪后的图片      
        QImage rawimg;
        if(!rawimg.load(rawfile))
        {
            qDebug()<<"image load fail:"<<rawfile;
            return -1;
        }

        QImage cutimg=rawimg.copy(QRect((rawimg.width()-640)/2,(rawimg.height()-480)/2,640,480));
        if(!cutimg.save(dstfile))
        {
            qDebug()<<"image save fail:"<<rawfile<<dstfile;
            return -1;
        }

方法二:缩放图片,变小后的图片是原始图片按比例的缩小版

        QString rawfile="***"; //原始图片  
        QString dstfile;       //裁剪后的图片           
        QImageReader reader(rawfile); // 设置图片名
        QSize imageSize(640,480); // 缩放图片尺寸以适应
        reader.setScaledSize(imageSize);
        QImage img = reader.read();
 		qDebug()<<"image byteCount: "<<img.byteCount();
        if(!img.save(dstfile))
        {
            qDebug()<<"image save fail:"<<rawfile<<dstfile;
            return -1;
        }

两种方法都可以达到图片变小的目的,但是方法二比方法一占用内存要小一些。

QImage读取图片时,在load时候就会占用内存,图片一个像素占用4个字节,如果load的jpg图片分辨率为1280*720占用的内存字节数为1280*720*4字节,这个值可以通过QImage.byteCount()获取到。

QImageReader在read的时候才会实际占用内存,可以通过setScaledSize来设置要读取的字节大小,所以在这个时候只占用640*480*4字节,内存占用大大减少了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值