#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QTimer>
#include "QDebug"
int i;
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_Image = QImage(200,200,QImage::Format_RGB32);
QColor backColor = qRgb(255,255,0); //画布初始化背景色使用白色
m_Image.fill(backColor);//对画布进行填充
m_Image2.fill(QColor(255,255,255));
time = new QTimer(this);
connect(time,SIGNAL(timeout()),this,SLOT(change()));
for(int i = 0;i<=1301;++i)
{
m_vector.append(i);
}
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
time->start(500);
}
void Widget::change()
{
QRgb value;
value = qRgb(255,0,0);
for(int j =0;j<200;++j)
{
m_Image.setPixel(j,i,value);
this->update();
}
++i;
}
//传入采样集合 acc 为取样精度
template <typename T>
QVector<T> Widget::transf(QVector<T> &vector,const int acc)
{
QVector<T> newVec;
newVec.reserve(vector.length()/acc);
auto it = vector.begin();
for (it ; vector.end()-it >acc; it+=acc)
{
auto max = std::max_element(it, it+acc);
newVec.push_back(*max);
}
return newVec;
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawImage(0,0,m_Image);
painter.drawImage(250,0,m_Image2);
}
void Widget::on_pushButton_2_clicked()
{
time->stop();
qDebug()<<transf(m_vector,4);
}
void Widget::on_pushButton_3_clicked()
{
m_Image2 = m_Image;
update();
for(int i =0;i<200;++i)
{
arr[i] = 0.523*i;
qDebug()<<arr[i];
}
qDebug()<<"转换了";
QVector<float> vec= charToVect(arr);
qDebug()<<vec;
}
template <typename T>
QVector<T> Widget::charToVect(T* arr)
{
for(int i; i<200; ++i)
{
m_vectorf.append(arr[i]);
}
qDebug()<<m_vectorf.length();
return m_vectorf;
}
在Qt框架中,QImage类是一个非常重要的图像处理类,它允许我们进行像素级别的操作,这对于需要精细控制图像显示或处理的应用来说是非常有用的。本文将深入探讨如何在Qt中使用QImage来动态更改图片的像素,并通过一个可运行的例子帮助你理解和实践这个功能。 QImage类提供了丰富的构造函数,可以用来创建一个新的图像或者加载已有的图像文件。例如,你可以使用`QImage(const QString & fileName)`来加载一个图像文件,或者使用`QImage(int width, int height, QImage::Format format)`来创建一个指定尺寸和格式的新图像。 在QImage对象中,每个像素都可以通过其坐标来访问和修改。QImage的像素数据存储为一个二维数组,可以通过`QImage::pixel()`和`QImage::setPixel()`方法读取和设置像素值。`QImage::pixel()`返回一个无符号的32位整数值,代表了像素的ARGB值,而`QImage::setPixel()`接受两个坐标参数和一个ARGB值,用于改变指定位置的像素颜色。 在进行像素级别的操作时,需要注意的是QImage的内存布局和像素格式。Qt支持多种像素格式,如RGB888、ARGB32等,不同的格式会影响像素的读写方式。例如,ARGB32格式的像素是按照Alpha、Red、Green、Blue的顺序存储的。如果你需要对图像进行颜色空间转换或其他复杂的图像处理,可能需要了解并使用到这些知识。 在实际应用中,我们可能会遇到需要批量更改像素的情况,这时可以使用迭代器或者索引来遍历所有像素。例如,我们可以遍历整个图像,将所有像素的红色分量增加一定的值,以实现整体色彩的调整: ```cpp for (int y = 0; y < image.height(); ++y) { for (int x = 0; x < image.width(); ++x) { QRgb pixel = image.pixel(x, y); QRgb newPixel = qRgba(qRed(pixel) + 50, qGreen(pixel), qBlue(pixel), qAlpha(pixel)); image.setPixel(x, y, newPixel); } } ``` 在提供的例子中,可能包含了一个使用QPixmap(QImage的一个派生类,主要增加了与图形系统交互的功能)的示例代码,展示了如何在界面上显示经过像素操作的图像。通常,我们会使用`QLabel`控件配合`QPixmap`来展示图像,并通过`QLabel::setPixmap()`方法更新显示。 总结一下,Qt中的QImage类为我们提供了强大的像素级别操作能力,无论是简单的颜色更改还是复杂的图像处理算法,都可以借助这个类来实现。理解QImage的内部结构和方法,能帮助我们更高效地处理图像数据,从而实现各种创新的视觉效果。记得在实际项目中,根据需求选择合适的像素格式,并注意性能优化,以避免不必要的内存开销和计算负担。
































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- 星火之燎原2020-11-04特别简单的一个例子,不满足需求

- 粉丝: 6
- 资源: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (源码)基于Python的微信智能机器人.zip
- (源码)基于Python的全国电力消费预测系统.zip
- MATLAB蚁群算法在配网重构与故障恢复中的应用:最小化失电负荷与降低线损
- (源码)基于Node.js的简易后台管理系统.zip
- 基于MATLAB/SIMULINK的PMSM永磁同步电机矢量控制模型及变转速加载仿真实现
- (源码)基于React框架的sinreact组件库.zip
- (源码)基于Qt框架的下载管理器.zip
- 机器人研究中PID控制与Simulink-Simscape Multibody联合仿真的实现及应用
- (源码)基于Arduino的红外墙式温度计系统.zip
- (源码)基于Flutter框架的IoT应用.zip
- 光学仿真领域:利用Matlab模拟拉盖尔-高斯光在大气湍流中的传输特性
- (源码)基于Gatsby框架的学习站点.zip
- (源码)基于 NestJS 框架的多功能后端服务系统.zip
- 工业自动化领域WinCC报表系统的全面解析与实战技巧
- (源码)基于 HTML 的合成大西瓜游戏魔改项目.zip
- 西门子PLC 1500系列:涵盖多种通讯协议与设备集成的工业自动化解决方案


