-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqgraphicssharpenfilter.cpp
59 lines (43 loc) · 1.2 KB
/
qgraphicssharpenfilter.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "qgraphicssharpenfilter.h"
#include <QImage>
#include <QPixmap>
#include <QDebug>
QGraphicsSharpenFilter::QGraphicsSharpenFilter(QObject *parent) :
QObject(parent)
{
}
QPixmap QGraphicsSharpenFilter::filter(const QPixmap pixmap, int size)
{
QImage img = pixmap.toImage();
img.convertToFormat(QImage::Format_ARGB32_Premultiplied);
QImage temp = img;
double z= size*0.01;
double mask[] = { 0, -z , 0,
-z, 1+4*z, -z,
0, -z , 0 };
int r,g,b;
for(int i=1;i<(img.height()-1);i++) {
for(int j=1;j<(img.width()-1);j++) {
double linc_r=0, linc_g=0,linc_b=0;
for(int k=0; k<=2; k++) {
for(int l=0; l<=2; l++) {
QRgb pixel = img.pixel(j+l-1,i+k-1);
linc_r +=( qRed(pixel) * mask[ k*3 + l] );
linc_g +=( qGreen(pixel)* mask[ k*3 + l] );
linc_b +=( qBlue(pixel) * mask[ k*3 + l] );
}
}
linc_r=qMin(int(linc_r),255);
linc_g=qMin(int(linc_g),255);
linc_b=qMin(int(linc_b),255);
linc_r=qMax(int(linc_r),0);
linc_g=qMax(int(linc_g),0);
linc_b=qMax(int(linc_b),0);
r = linc_r;
g = linc_g;
b = linc_b;
img.setPixel(j,i,qRgb(r,g,b));
}
}
return pixmap.fromImage(img);
}