Qt实现QQ截图中的马赛克效果
生活随笔
收集整理的这篇文章主要介绍了
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截图中的马赛克效果的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 基于MATLAB的混沌密码与数字图像加密
- 下一篇: 该网页无法正常运作 目前无法处理此请求