Krita Source Code Documentation
Loading...
Searching...
No Matches
DuplicateOpUtils Namespace Reference

Functions

qreal minimizeEnergy (const qreal *m, qreal *sol, int w, int h)
 

Function Documentation

◆ minimizeEnergy()

qreal DuplicateOpUtils::minimizeEnergy ( const qreal * m,
qreal * sol,
int w,
int h )
inline

Definition at line 16 of file kis_duplicateop_p.h.

17{
18 qreal err = 0;
19
20 if (h < 3 || w < 3) {
21 int size = 3 * w * h;
22
23 for (int i = 0; i < size; i++) {
24 sol[i] = 1.0;
25 }
26
27 warnKrita << "WARNING: healing width or height are smaller than 3 px. The result will have artifacts!";
28
29 } else {
30 int rowstride = 3 * w;
31
32 memcpy(sol, m, 3 * sizeof(qreal) * w);
33 m += rowstride;
34 sol += rowstride;
35 for (int i = 1; i < h - 1; i++) {
36 memcpy(sol, m, 3 * sizeof(qreal));
37 m += 3; sol += 3;
38 for (int j = 3; j < rowstride - 3; j++) {
39 qreal tmp = *sol;
40 *sol = ((*(m - 3) + * (m + 3) + * (m - rowstride) + * (m + rowstride)) + 2 * *m) / 6;
41 qreal diff = *sol - tmp;
42 err += diff * diff;
43 m ++; sol ++;
44 }
45 memcpy(sol, m, 3 * sizeof(qreal));
46 m += 3; sol += 3;
47 }
48 memcpy(sol, m, 3 * sizeof(qreal) * w);
49 }
50
51 return err;
52}
#define warnKrita
Definition kis_debug.h:87

References warnKrita.