1. QImage绘图基础解析
QImage是Qt框架中用于图像处理的核心类之一,它提供了与硬件无关的图像表示方式。与QPixmap不同,QImage直接操作像素数据,这使得它在图像处理算法实现上具有独特优势。在实际项目中,我经常使用QImage来处理需要精细像素控制的场景,比如图像滤镜实现、科研数据可视化等。
QImage支持多种图像格式,从常见的RGB32、ARGB32到灰度图像、单色位图等。创建QImage对象时,我们需要明确指定格式参数:
cpp复制// 创建300x300的32位RGB图像(不带alpha通道)
QImage img(300, 300, QImage::Format_RGB32);
// 创建带透明通道的图像
QImage imgWithAlpha(300, 300, QImage::Format_ARGB32);
// 创建8位灰度图像
QImage grayImage(300, 300, QImage::Format_Grayscale8);
注意:格式选择直接影响内存占用和后续处理效率。Format_RGB32每个像素占用4字节(实际只使用3字节),而Format_RGB888每个像素严格使用3字节,但处理速度会稍慢。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 像素级操作实战
QImage最强大的特性在于可以直接访问和修改像素数据。下面通过一个实际案例演示如何实现图像反色效果:
cpp复制void invertImage(QImage &image) {
if(image.isNull()) return;
// 锁定图像内存(对于Format_RGB32等格式非必须,但建议保持这个习惯)
image.lock();
for(int y = 0; y < image.height(); ++y) {
// 获取每行像素的起始指针
uchar *line = image.scanLine(y);
// 根据格式处理像素
if(image.format() == QImage::Format_RGB32) {
for(int x = 0; x < image.width
