QT使用QImage制作图片的四种(圆形,六边形,复古与负片)效果(测试过效果的代码)

这篇具有很好参考价值的文章主要介绍了QT使用QImage制作图片的四种(圆形,六边形,复古与负片)效果(测试过效果的代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

负片效果:

QImage originalImage("path/to/image.jpg");

// 对每个像素进行操作
for (int y = 0; y < originalImage.height(); y++) {
    for (int x = 0; x < originalImage.width(); x++) {
        QColor color = originalImage.pixelColor(x, y);

        // 颜色反转
        int red = 255 - color.red();
        int green = 255 - color.green();
        int blue = 255 - color.blue();

        // 设置新的颜色
        QColor newColor(red, green, blue);
        originalImage.setPixelColor(x, y, newColor);
    }
}

originalImage.save("path/to/negative_image.jpg");

复古效果: 

QImage originalImage("path/to/image.jpg");

// 复古效果参数
int hueShift = 30;       // 色调偏移量
int saturationShift = -50;  // 饱和度偏移量
int contrastLevel = 30;  // 对比度水平

// 对每个像素进行操作
for (int y = 0; y < originalImage.height(); y++) {
    for (int x = 0; x < originalImage.width(); x++) {
        QColor color = originalImage.pixelColor(x, y);

        // 调整色调
        int hue = color.hue() + hueShift;
        if (hue < 0) {
            hue += 360;
        } else if (hue >= 360) {
            hue -= 360;
        }

        // 调整饱和度
        int saturation = qMax(0, qMin(color.saturation() + saturationShift, 255));

        // 调整亮度
        int value = color.value();

        // 调整对比度
        int contrast = value < 128 ? contrastLevel : -contrastLevel;
        value = qMax(0, qMin(value + contrast, 255));

        // 设置新的颜色
        QColor newColor;
        newColor.setHsv(hue, saturation, value);
        originalImage.setPixelColor(x, y, newColor);
    }
}

originalImage.save("path/to/vintage_image.jpg");

 裁剪成圆形

 

QImage rotatedImage("path/to/image.jpg");      
QImage resultImage(rotatedImage.size(), QImage::Format_ARGB32);
resultImage.fill(Qt::transparent);

QPainter painter(&resultImage);
painter.setRenderHint(QPainter::Antialiasing);

 // 创建一个圆形路径,并将其设置为绘制区域
QPainterPath path;
path.addEllipse(resultImage.rect());
painter.setClipPath(path);
painter.setClipping(true);

// 在绘制区域内绘制原始图像
painter.drawImage(resultImage.rect(), rotatedImage);
painter.end();

rotatedImage.save("path/to/vintage_image.jpg");

裁剪成六边形:

        QImage rotatedImage("path/to/image.jpg");    

        QImage mask(rotatedImage.size(), QImage::Format_ARGB32);
        mask.fill(Qt::transparent);
        QPainter maskPainter(&mask);
        maskPainter.setRenderHint(QPainter::Antialiasing);
        maskPainter.setPen(Qt::NoPen);
        maskPainter.setBrush(Qt::black);

        // 构建六边形
        QPolygonF hexagon;
        int centerX = mask.width() / 2;
        int centerY = mask.height() / 2;
        int sideLength = std::min(mask.width(), mask.height()) / 2;
        for (int i = 0; i < 6; i++) {
            qreal angle = (60.0 * i + 30.0) * M_PI / 180.0;
            QPointF point(centerX + sideLength * cos(angle), centerY + sideLength * sin(angle));
            hexagon << point;
        }
        // 绘制六边形遮罩
        maskPainter.drawPolygon(hexagon);
        // 应用遮罩到原始图像
        rotatedImage.setAlphaChannel(mask.alphaChannel());
        rotatedImage.save("path/to/vintage_image.jpg");

 文章来源地址https://www.toymoban.com/news/detail-638819.html

到了这里,关于QT使用QImage制作图片的四种(圆形,六边形,复古与负片)效果(测试过效果的代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt+OpenCV显示图片(Mat转QImage然后显示在QLabel上)

    此篇主要是记录一下如何将OpenCV集成得到Qt Creator中,并将OpenCV的Mat对象转换为QImage并使用qt的api显示图片 a.使用Qt Creator开发工具集成OpenCV,在.pro文件中配置环境即可,如下图所示 b.将Mat对象转为QImage对象并使用Qt显示出来的步骤如下: 1.将使用OpenCV imread函数加载一张图片 2.将

    2024年02月11日
    浏览(46)
  • QT的信号槽的四种写法和五种链接方式

    目录 四种信号槽写法: 五种连接方式: 实例: 常见错误及改正: 错误1: 未连接信号与槽 错误2: 信号和槽参数不匹配 错误3: 未使用Q_OBJECT宏 错误4: 跨线程连接未处理   在Qt中,信号(Signal)和槽(Slot)是一种用于对象之间通信的机制,用于实现一种松耦合的方式。信号被

    2024年02月13日
    浏览(39)
  • 【五一创作】VS+Qt主界面内嵌自定义控件的四种方法以及不同自定义控件数据交互

    在Qt界面开发过程中,一个主界面或者主窗口看成是各个控件排列组合后的集合,对于一些项目而言,有些常用的控件可以封装成自己想要的控件样式并且复用,比如说,log显示控件,图像/视频显示控件等,可以将常用的控件代码封装起来,以便下次复用,内嵌在不同的主界

    2024年02月11日
    浏览(61)
  • QT图像处理类QImage常见使用方法

    Qt 是一个跨平台的 C++ 库,提供了丰富的图像处理功能,可以用来实现各种图像处理任务,例如图像缩放、旋转、灰度化、二值化等。本文将介绍使用 Qt 实现图像处理的方法,并提供代码示例。 在 Qt 中,可以使用 QImage 类型来加载和保存图像,QImage 支持多种图像格式,例如

    2024年02月03日
    浏览(78)
  • Java中的四种引用类型及其使用方式

    Java中有四种引用类型,分别是强引用(Strong Reference)、软引用(Soft Reference)、弱引用(WeakReference)、虚引用(PhantomReference)。 这要从Java管理内存的方式说起。Java为了将程序员从内存管理中解救出来,即不让程序员自己申请堆内存(比如C语言程序员需要通过malloc请求操作系统分配一

    2023年04月09日
    浏览(48)
  • 【图解RabbitMQ-6】说说交换机在RabbitMQ中的四种类型以及使用场景

    🧑‍💻作者名称:DaenCode 🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······ 😎人生感悟:尝尽人生百味,方知世间冷暖。

    2024年02月07日
    浏览(78)
  • 微信小程序使用canvas绘制网络图片,使用canvas将图片变成圆形

    以上的写法 会造成某些图标无法绘制上去, 解决方法是在网络图片中不断嵌套,先绘制大图片,再绘制小图片的顺序 网上说使用先下载到本地,再使用img.src加载,我尝试过还是不行 长用在海报,需要将用户的头像画到canvas图片上,如: 其原理就是在图片上面放一个圆

    2024年02月13日
    浏览(68)
  • QT:制作图片浏览器

    widget.h widget.cpp main.cpp widget.ui 结果

    2024年02月07日
    浏览(41)
  • QT图片浏览器制作

    一、Win7的自带查看器的效果 二、自己手工制作的效果 1、UI界面 2、效果界面 三、代码实现 1、头文件 2、主代码 (1)全局定义和预加载 (2)列表按钮:tool_button (3)切换图片 (4)自动播放和停播 (5)放大,缩小,图片旋转 总结: 传送门 1、利用控件实现文件打开,保

    2024年02月10日
    浏览(36)
  • 使用opencv计算图片上任意一点到图片中心点距离为半径绘制圆形,计算FOV

    一、计算公式 图片坐标:Point(x,y) 半径 :r = ( x − i m a g e . c o l s / 2 ) 2 + ( y − i m a g e . r o w s / 2 ) 2 sqrt {(x - image.cols/2)^2 + (y - image.rows/2)^2} ( x − ima g e . co l s /2 ) 2 + ( y − ima g e . ro w s /2 ) 2 ​ 二、以 R R R 为半径在图像上绘制圆形,如下图所示: 三、实现代码

    2024年01月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包