不同的图片
QPixmap:主要用于绘图,针对平台进行优化,和平台相关(依赖于平台的绘图引擎)
QImage:和平台无关(使用Qt的绘图引擎),可以对图片像素修改(setPixpel()和pixel())。注意:可以在线程中绘制
QBitmap 继承Qpixmap,用于单色(单通道图像,占用内存小)
QPicture:保存绘图状态(使用begin()方法在QPicture上进行绘图,end()结束绘图,save()保存至档案,load()加载保存好的档案)
简单的:QImage用来加载图像,QPixmap用来绘图,QPicture用来保存需要反复绘制的(比如背景),QBitmap用来绘制黑白图像
图片转换
Qpixmap::toImage()
Qpixmap::fromImage()
图片修改
1. QPainter指定绘图设备,直接用QPainter在图片上绘图
QPixmap pixmap;
QPainter painter(&pixmap);
2. 使用指针遍历像素点
3. 修改像素点
setPixel(x, y, qRgb());
4. 保存图像
save()
图片缩放
QPixmap::scaled(QSize())
缩放策略:
IgnoreAspectRatio 矩形框有多大,图片就缩放成多大,不限制原图片的长宽比
KeepAspectRatio 保持原图片的长宽比,且不超过矩形框的大小
KeepAspectRatioByExpanding 根据矩形框的大小最大缩放图片
图片旋转
painter.translate(x0, y0); //旋转的中心设为原点
painter.rotate(); //坐标轴旋转度数
painter.restore(); //复位之前的坐标系
/**
* @description: 保存jpg
* @param {type}
* @return:
*/
void save_pixmap(const QString &fileName, const QByteArray &data) {
QPixmap pixmap;
pixmap.loadFromData(data, "JPG");
pixmap.save(fileName, "JPG", 100);
}
/**
* @description: 遍历image元素
* @param {type}
* @return:
*/
void image_pix(const QString &imagePath)
{
QImage image(imagePath);
QSize size = image.size();
int width = size.width();
int height = size.height();
int realWidth = image.bytesPerLine(); //图像每行字节数
uchar *imageData = image.bits(); //可以获取图像的首地址
uchar *src = imageData;
for (int i = 0; i < height; i++)
{
imageData = src + realWidth * i; // 行首
for (int j = 0; j < width; j++)
{
// *(imageData+j)
}
}
}
/**
* @description: 图片旋转
* @param {type}
* @return:
*/
void picture_rotate(QPixmap &pixmap, const int &rotate) {
QMatrix matrix;
matrix.rotate(rotate); // 大于0则顺时针
pixmap = pixmap.transformed(matrix, Qt::SmoothTransformation);
}