设备无关图像类-QImage:
设备相关图像类-QPixmap:
要点:
特殊技能:
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QImage img;
if( img.load("test.jpg") )
{
img = img.scaled(QSize(img.width() / 2, img.height() / 2));
for(int i=0; i<img.width(); i++)
{
for(int j=0; j<img.height(); j++)
{
QRgb rgb = img.pixel(i, j);
int r = qRed(rgb);
int g = qGreen(rgb);
int b = qBlue(rgb);
int gray = (r + g + b) / 3;
img.setPixel(i, j, qRgb(gray, gray, gray));
}
}
img.save("new.jpg");
}
return a.exec();
}
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
class Widget : public QWidget
{
Q_OBJECT
QPushButton m_loadBtn;
QPushButton m_grabBtn;
QPixmap m_pmap;
private slots:
void onLoadBtnClicked();
void onGrabBtnClicked();
protected:
void paintEvent(QPaintEvent *);
public:
Widget(QWidget *parent = 0);
~Widget();
};
#endif // WIDGET_H
Widget.cpp:
#include "Widget.h"
#include
#include
#include
#include
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
m_loadBtn.setParent(this);
m_loadBtn.move(10, 10);
m_loadBtn.resize(70, 30);
m_loadBtn.setText("Load");
m_grabBtn.setParent(this);
m_grabBtn.move(90, 10);
m_grabBtn.resize(70, 30);
m_grabBtn.setText("Grab");
resize(500, 350);
connect(&m_loadBtn, SIGNAL(clicked()), this, SLOT(onLoadBtnClicked()));
connect(&m_grabBtn, SIGNAL(clicked()), this, SLOT(onGrabBtnClicked()));
}
void Widget::onLoadBtnClicked()
{
QFileDialog fd(this);
fd.setAcceptMode(QFileDialog::AcceptOpen);
fd.setFileMode(QFileDialog::ExistingFile);
if( fd.exec() == QFileDialog::Accepted )
{
QImage img;
if( img.load(fd.selectedFiles()[0]) )
{
m_pmap = QPixmap::fromImage(img);
update();
}
else
{
QMessageBox(QMessageBox::Critical, "Error", "Invalid image file!").exec();
}
}
}
void Widget::onGrabBtnClicked()
{
m_pmap = QPixmap::grabWindow(QApplication::desktop()->winId());
update();
}
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter;
if( !m_pmap.isNull() )
{
painter.begin(this);
painter.drawPixmap(0, 0, width(), height(), m_pmap);
painter.end();
}
}
Widget::~Widget()
{
}
main.cpp:
#include
#include "Widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
参考资料: