图像处理 QImage
创始人
2024-02-15 06:37:14
0

在Qt中有四种处理图像的方法:

  • QImage  :使用I/O ,可以对像素进行处理
  • QPixmap:主要用在屏幕的显示
  • QBitmap: QPixmap的子类,处理颜色深度,只能显示黑白两种颜色,用于遮罩
  • QPicture:用来重演QPainter命令

QPainter绘制图像的方法:

  • QPainter::drawImage()    绘制Image
  • QPainter::drawPixmap()  绘制Pixmap
  • QPainter::drawPixmap()  绘制Bitmap
  • QPainter::drawPicture()   绘制Picture

QImage

  • QImage 类提供独立于硬件的图像表示形式,允许直接访问像素数据,并可用作绘画设备
  • QImage是QPaintDevice的子类,所以QPainter可以直接在图像上绘制。在 QImage 上使用Qpainter时,可以在当前 GUI 线程以外的其他线程中执行绘制。
  • QImage 对象可以按值传递,因为 QImage 类使用隐式数据共享。Qmage对象也可以流式传输和比较。

Qt中支持的图像格式:

格式支持的操作
BMP读/写
GIF
JPG读/写
JPEG读/写
PNG读/写
PBM
PGM
PPM读/写
XBM读/写
XPM读/写

QImage::Format

有几十种图像格式,可以去查看官方文档。

QImage::Format_Invalid图像无效。
QImage::Format_Indexed8图像使用 8 位索引存储到颜色图中
QImage::Format_RGB32图像使用 32 位 RGB 格式 (0xffRRGGBB) 存储
QImage::Format_ARGB32图像使用 32 位 ARGB 格式 (0xAARRGGBB) 存储。
QImage::Format_RGB16图像使用 16 位 RGB 格式 (5-6-5) 存储。

 构造函数:有两种

图像参数:

size()图片的大小
width()图片宽度
height()图片的高度
dotsPertMeterX()返回在物理计量中水平适合的像素数
dotsPertMeterY()返回在物理计量中竖直适合的像素数
valid()判断是否为有效位置
offset()返回偏移量

 像素操作:

setPixelColor()设置指定坐标的颜色
setPixel(position,index_rgb)返回给定位置的像素颜色为index_rgb
setColor()设置索引处的颜色
setColorCount()扩容
pixel()返回索引处的颜色  QRgb
pixelColor()

返回索引处的颜色  QColor

pixelFromat()返回指定位置的格式
pixelIndex()返回指定位置的索引
scanLine()返回索引处的像素指针
bits()返回指向第一个像素数据的指针。这等效于scanLine(0)

设置像素的颜色:

1.直接设置颜色

    QImage image(3,3,QImage::Format_Indexed8);//直接设置像素点位颜色image.setPixel(0,0,qRgb(0,255,255));image.setPixel(0,1,qRgb(255,0,255));image.setPixel(0,2,qRgb(255,255,0));

2.通过setColor()存储颜色然后再添加

setColor()会存储索引处的颜色

    QImage image(3,3,QImage::Format_Indexed8);//直接设置像素点位颜色image.setColor(0,qRgb(0,255,255));//索引0对应的元素为qRgb(0,255,255)image.setColor(1,qRgb(255,0,255));//索引1对应的元素为qRgb(255,0,255)image.setColor(2,qRgb(255,255,0));//索引2对应的元素为qRgb(255,255,0)//设置颜色image.setPixel(0,0,0);image.setPixel(0,1,1);image.setPixel(0,2,2);

遍历像素 :

1.直接遍历

    QImage image(10,10,QImage::Format_Indexed8);//遍历像素for(int x=0;x

2.按行遍历

使用scanLine()获取一行的像素

  • uchar*QImage::scanLine(inti) 返回的是一个指针
  • 访问32bpp 图像数据,请将返回的指针转换为(QRgb具有 32 位大小)并使用它来读取/写入像素值
  • 使用参数时使用qRed()、qGreen()、qBlue()和qAlpha() 访问像素
    QImage image(10,10,QImage::Format_RGB32);//遍历像素//读取行for(int y=0;y

实例的话请看点击以下链接:

 基于Qt的图像处理技术和算法_拳四郎的博客-CSDN博客_qt 滤波

一些其他的函数:

allGray()判断颜色是灰色阴影(红绿蓝相同)
colorTable()返回图像中的颜色表
depth()返回图像的深度
fill()给定颜色填充整个像素
invertPixels()反转图像的像素值
load()读取设备的图像
save()保存图像
scaled()缩放
setText()将图像文本设置为给定文本,并将其与给定关联
valid判断点位是否在图像上

打开或保存图片:load  save

    QImage image(10,10,QImage::Format_RGB32);image.load("D:/Qt_Android_work/data_082/456.png");//打开图像文件image.save("D:/123.png0");//保存图像文件

fill填充的使用:

void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);QImage image(100,100,QImage::Format_RGB32);image.fill(qRgb(200,200,200));//填充painter.drawImage(0,0,image);
}

 缩放的使用:

  •  该函数返回的是一个副本
  • size() 为图像大小
  • 后面的参数为设置纵横比

 

void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);QImage image(100,100,QImage::Format_RGB32);image.fill(qRgb(200,200,200));//填充image=image.scaled(image.width()*5,image.height()*5);//放大5倍painter.drawImage(0,0,image);
}


QImage可以用来绘图

QImage 也可以作为设备进行绘图

void Widget::paintEvent(QPaintEvent *event)
{QPainter painter;QImage image(200,200,QImage::Format_ARGB32);painter.begin(&image);painter.setPen(QPen(Qt::red,3));painter.setBrush(Qt::cyan);painter.drawRect(0,0,100,100);painter.drawEllipse(100,100,100,100);painter.end();painter.begin(this);painter.drawImage(0,0,image);//绘制
}

 

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...