QImage 图像分辨率为1200*600 导致图像宽度拉伸,长宽比与原图不一致

7 篇文章 0 订阅

 Qt提供四个类来处理图像数据:QImage、QPixmap、QBitmap和QPicture。

(1)QImage:针对I/O和直接像素访问和操作进行设计和优化的类。

(2)QPixmap:针对屏幕上显示的图像进行设计和优化的类。

(3)QBitmap:一个继承自QPixmap的便捷类,确保深度为1。

(4)QPicture:该类是一个绘画设备,可以记录和回放QPainter命令。

大概是说QPixmap主要用于显示,而QImage则是图像的物理存储信息。

接下来我们要对QImage进行像素级的图片读写,可用的函数很多

QImage(const QSize &size, Format format);

QImage(int width, int height, Format format);

QImage(uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);

QImage(const uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);

QImage(uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);

QImage(const uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);

我的图像函数如下:

QImage objImage(pBufOut.get(),             // 存储图像数据的空间指针
                (int)nPageWidthPixel,      // 图像的宽度,像素大小
                (int)nPageHeightPixel,  
                (int)nPageWidthPixel * 3,  // RGB三种颜色
                QImage::Format_RGB888);

将图像缩放
 

int nImageWidth = objImage.width() * (int)m_objPreviewJob.nResolutionHeight /                                      (int)m_objPreviewJob.nResolutionWidth;

QImage objImageEnd = objImage.scaled(nImageWidth, objImage.height(),
                     Qt::IgnoreAspectRatio,Qt::FastTransformation);

得到的objImageEnd 是缩放的结果,需要显示时,要代入这个

m_pScene->addPixmap(QPixmap::fromImage(objImageEnd));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值