欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Qt实现QQ截图中的马赛克效果

发布时间:2024/1/8 编程问答 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Qt实现QQ截图中的马赛克效果 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一.效果

二.原理

对于截图类工具,虽然有撤销功能,但是画图形、写文字等操作应该不是在原图上直接操作的。通常的做法有两种,一是在原图窗口上覆盖一层透明的窗口,所有的操作都在这层透明窗口上进行,最终保存的时候将透明窗口上的图形和原图合并成一张图片;二是直接在原图上覆盖一层和原图一样的窗口,直接在新窗口上对图片进行操作,最终直接保存新窗口的图片即可。本文使用方法二。

马赛克的原理是,将窗口等分成相同大小的正方形小块,正方形的宽度可以自定义,比如10像素,当鼠标滑动时,计算当前鼠标位置对应小块的左上角顶点,然后取出该顶点在图片中对应的颜色值(因为这里是直接在图片上操作,所以需要事先copy一份图片用于取色),当然这里直接取左上角顶点的颜色值比较暴力,更好的做法是计算小块的颜色均值。

撤销和重做的原理是,从鼠标按下到释放算是一次操作,鼠标释放时将图片压栈,撤销时将图片出栈,并将出栈的图片压入重做列表中......

三.实现

#include "QHMosaic.h"#include <QPainter> #include <QCursor> #include <QDebug>QHMosaic::QHMosaic(QWidget *parent): QWidget(parent), m_mosaicChunkSize(10) {m_pixmap.load(":/Test.jpg");m_copyPixmap=

总结

以上是生活随笔为你收集整理的Qt实现QQ截图中的马赛克效果的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。