Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_duplicateop_p.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org>
3 * SPDX-FileCopyrightText: 2004-2008 Boudewijn Rempt <boud@valdyas.org>
4 * SPDX-FileCopyrightText: 2004 Clarence Dang <dang@kde.org>
5 * SPDX-FileCopyrightText: 2004 Adrian Page <adrian@pagenet.plus.com>
6 * SPDX-FileCopyrightText: 2004 Cyrille Berger <cberger@cberger.net>
7 *
8 * SPDX-License-Identifier: GPL-2.0-or-later
9 */
10
11#ifndef KIS_DUPLICATEOP_P_H_
12#define KIS_DUPLICATEOP_P_H_
13
15
16inline qreal minimizeEnergy(const qreal* m, qreal* sol, int w, int 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}
53}
54
55#endif // KIS_DUPLICATEOP_P_H_
#define warnKrita
Definition kis_debug.h:87
qreal minimizeEnergy(const qreal *m, qreal *sol, int w, int h)