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的混沌密码与数字图像加密
- 下一篇: 该网页无法正常运作 目前无法处理此请求