Qt支持多种图像格式,包括PNG、JPEG、BMP、GIF等。Qt中的QImage
类提供了对这些图像格式的支持,你可以使用QImage
加载和保存不同格式的图像。
以下是Qt默认支持的图像格式列表:
除了以上格式,Qt还支持以下一些特殊格式:
请注意,具体的支持格式取决于Qt的编译配置。在编译Qt时,你可以选择启用或禁用特定的图像格式支持。如果你需要支持某个特定的图像格式,确保在编译Qt时启用了相应的支持选项。
使用 QImage
的构造函数或 load()
函数可以从文件、内存或设备加载图像。你可以传递图像文件的路径给构造函数,或者使用 load()
函数加载图像文件。
QImage image("path/to/image.png"); // 从文件加载
// 或者
QImage image;
image.load("path/to/image.png"); // 从文件加载
使用 save()
函数可以将 QImage
保存为文件。你可以指定文件名以及图像格式(如 PNG、JPEG 等)。
image.save("output/path/image.png"); // 保存为PNG格式
// 或者
image.save("output/path/image.jpg", "JPEG"); // 保存为JPEG格式
以下是一个简单的实例,演示了如何使用 QImage
加载图像并将其保存为不同的格式。
#include
#include
int main() {
// 加载图像
QImage image("path/to/input.png");
// 检查图像是否成功加载
if (image.isNull()) {
qDebug() << "Failed to load image.";
return 1;
}
// 保存图像为不同格式
if (image.save("path/to/output.png")) {
qDebug() << "Image saved as PNG.";
} else {
qDebug() << "Failed to save image as PNG.";
}
if (image.save("path/to/output.jpg", "JPEG")) {
qDebug() << "Image saved as JPEG.";
} else {
qDebug() << "Failed to save image as JPEG.";
}
if (image.save("path/to/output.bmp", "BMP")) {
qDebug() << "Image saved as BMP.";
} else {
qDebug() << "Failed to save image as BMP.";
}
return 0;
}
在这个例子中,首先加载了一个图像文件(假设路径为 “path/to/input.png”),然后将其保存为不同格式的文件。save()
函数的第二个参数可以指定保存的图像格式,如 “PNG”、“JPEG”、“BMP” 等。根据你的需要,可以选择适当的格式。在实际应用中,请替换实际的文件路径和格式。
使用 size()
函数可以获取图像的大小,返回一个 QSize
对象,其中包含图像的宽度和高度。
QSize imageSize = image.size();
int width = imageSize.width();
int height = imageSize.height();
使用 scaled()
函数可以对图像进行缩放。该函数接受目标宽度和高度作为参数,返回一个新的 QImage
对象,表示缩放后的图像。你也可以选择使用不同的缩放模式,如保持宽高比例或拉伸到指定大小。
// 缩放为指定的宽度和高度
QImage scaledImage = image.scaled(100, 100);
// 缩放并保持宽高比例
QImage aspectRatioImage = image.scaled(100, 100, Qt::KeepAspectRatio);
// 拉伸到指定的宽度和高度
QImage stretchedImage = image.scaled(100, 100, Qt::IgnoreAspectRatio);
以下是一个简单的实例,演示了如何获取图像的大小并对图像进行缩放。
#include
#include
int main() {
// 加载图像
QImage image("path/to/image.png");
// 检查图像是否成功加载
if (image.isNull()) {
qDebug() << "Failed to load image.";
return 1;
}
// 获取图像大小
QSize imageSize = image.size();
int width = imageSize.width();
int height = imageSize.height();
qDebug() << "Original Image Size: " << width << "x" << height;
// 缩放图像为指定的宽度和高度
QImage scaledImage = image.scaled(50, 50);
int scaledWidth = scaledImage.width();
int scaledHeight = scaledImage.height();
qDebug() << "Scaled Image Size: " << scaledWidth << "x" << scaledHeight;
return 0;
}
在这个例子中,首先加载了一个图像文件(假设路径为 “path/to/image.png”),然后获取了原始图像的大小,并将其缩放为50x50的尺寸。请替换实际的文件路径和缩放目标尺寸。
使用 transformed()
函数可以对图像进行旋转。该函数接受一个 QMatrix
对象作为参数,该对象描述了旋转的角度和其他变换信息。
QMatrix matrix;
matrix.rotate(90); // 旋转90度
QImage rotatedImage = image.transformed(matrix);
使用 copy()
函数可以对图像进行裁剪。该函数接受起始点的坐标和裁剪区域的宽度和高度作为参数。
QImage croppedImage = image.copy(x, y, width, height);
以下是一个简单的实例,演示了如何对图像进行旋转和裁剪。
#include
#include
#include
int main() {
// 加载图像
QImage image("path/to/image.png");
// 检查图像是否成功加载
if (image.isNull()) {
qDebug() << "Failed to load image.";
return 1;
}
// 旋转图像
QMatrix matrix;
matrix.rotate(90); // 旋转90度
QImage rotatedImage = image.transformed(matrix);
rotatedImage.save("path/to/rotated_image.png"); // 保存旋转后的图像
// 裁剪图像
int x = 50;
int y = 50;
int width = 100;
int height = 100;
QImage croppedImage = image.copy(x, y, width, height);
croppedImage.save("path/to/cropped_image.png"); // 保存裁剪后的图像
return 0;
}
在这个例子中,首先加载了一个图像文件(假设路径为 “path/to/image.png”),然后对图像进行了90度的旋转和裁剪操作,并将结果保存为新的图像文件。请替换实际的文件路径和裁剪区域的坐标、宽度、高度。
Qt提供了QImageFilter
类,用于应用各种滤镜效果。滤镜可以用于图像处理,例如模糊、亮度、对比度等。以下是一些常见的滤镜效果:
QImage blurredImage = image.filter(QImage::Filter_GaussianBlur, 5); // 半径为5的高斯模糊
QImage brightenedImage = image.filter(QImage::Filter_Brightness, 50); // 增加50个亮度单位
QImage contrastedImage = image.filter(QImage::Filter_Contrast, 20); // 增加20个对比度单位
以下是一个简单的实例,演示了如何使用QImageFilter
应用模糊滤镜、亮度滤镜和对比度滤镜:
#include
#include
int main() {
// 加载图像
QImage image("path/to/image.png");
// 检查图像是否成功加载
if (image.isNull()) {
qDebug() << "Failed to load image.";
return 1;
}
// 应用模糊滤镜
QImage blurredImage = image.filter(QImage::Filter_GaussianBlur, 5);
// 应用亮度滤镜
QImage brightenedImage = image.filter(QImage::Filter_Brightness, 50); // 增加50个亮度单位
// 应用对比度滤镜
QImage contrastedImage = image.filter(QImage::Filter_Contrast, 20); // 增加20个对比度单位
// 保存处理后的图像
blurredImage.save("path/to/blurred_image.png");
brightenedImage.save("path/to/brightened_image.png");
contrastedImage.save("path/to/contrasted_image.png");
return 0;
}
在这个例子中,首先加载了一个图像文件(假设路径为 “path/to/image.png”),然后分别应用了模糊滤镜、亮度滤镜和对比度滤镜,并将处理后的图像保存为新的文件。请替换实际的文件路径和滤镜参数值。