【QT】在一张图片上自定义图形

发布于:2024-12-22 ⋅ 阅读:(16) ⋅ 点赞:(0)

在 Qt 中,可以通过在一个绘图设备(如 QPixmapQImage)上进行绘图来实现在图片上重新图形。以下是实现方法的步骤和代码示例:

步骤:

  1. 加载原始图片:使用 QPixmapQImage 加载图片。
  2. 创建绘图环境:利用 QPainter 在图片上进行绘图操作。
  3. 绘制图形:使用 QPainter 提供的绘图函数绘制所需的图形。
  4. 显示结果:将绘制后的图片显示在 QLabel 或其他可视控件中。

示例代码
以下代码展示如何在一张图片上绘制一些额外的图形(如矩形、圆形和线条):

#include <QApplication>
#include <QLabel>
#include <QPixmap>
#include <QPainter>
#include <QPen>
#include <QBrush>

int main(int argc, char *argv[]) {
	QApplication app(argc, argv);

	// 1. 加载原始图片
	QPixmap pixmap(":/path_to_your_image.jpg");		// 替换为实际图片路径

	// 2. 创建 QPainter 在图片上
	QPainter painter(&pixmap);

	// 设置画笔(用于描边)
	QPen pen(Qt::red);
	pen.setWidth(3);
	painter.setPen(pen);

	// 设置画刷(用于填充)
	QBrush brush(Qt::blue);
	painter.setBrush(brush);

	// 3. 绘制图形
	painter.drawRect(50, 50, 100, 100);		// 矩形
	painter.drawEllipse(200, 50, 100, 100);		// 圆形
	painter.drawLine(50, 200, 300, 200);		// 线条

	// 结束绘图
	painter.end();

	// 4. 显示绘制后的图片
	QLabel label;
	label.setPixmap(pixmap);
	label.show();
	
	return app.exec();
}

关键点

  • QPainter:这是 Qt 的绘图工具类,支持各种绘图操作(如绘制形状、文字等)。
  • 绘图设备QPainter 可以用于 QPixmapQImageQWdiget
  • 显示控件: 使用 QLabelQGraphicsView 来显示最终结果。

注意事项

  1. 如果需要反复更新绘图结果,建议将绘图逻辑放入 QWidget 的 paintEvent 方法中。
  2. 如果绘图是实时的(如用户交互绘图),建议结合鼠标事件进行处理。
  3. 使用 QImage 而不是 QPixmap 时,可以更方便地对图像进行像素级操作。

图像上重绘可以用在很多场景,这些都可以在实际的生产遇到。
多思考,多思考,多思考。重要的事情说3遍!