1 /* 2 Actiona 3 Copyright (C) 2005 Jonathan Mercier-Ganady 4 5 Actiona is free software: you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation, either version 3 of the License, or 8 (at your option) any later version. 9 10 Actiona is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 Contact : jmgr@jmgr.info 19 */ 20 21 #pragma once 22 23 #include "actiontools_global.h" 24 #include "qtimagefilters/QtImageFilter" 25 #include "code/codeclass.h" 26 #include "matchingpointlist.h" 27 28 #include <QObject> 29 #include <QScriptValue> 30 #include <QScriptEngine> 31 #include <QImage> 32 33 namespace ActionTools 34 { 35 class OpenCVAlgorithms; 36 } 37 38 namespace Code 39 { 40 class ACTIONTOOLSSHARED_EXPORT Image : public CodeClass 41 { 42 Q_OBJECT 43 Q_ENUMS(Filter) 44 Q_ENUMS(MirrorOrientation) 45 Q_ENUMS(AlgorithmMethod) 46 47 public: 48 enum Filter 49 { 50 ConvolutionFilter, 51 GaussianBlur, 52 Defocus, 53 Highlight, 54 Sharpen, 55 SharpenMore, 56 SharpenEvenMore, 57 EdgeDetect, 58 BigEdge, 59 Emboss, 60 EmbossColor, 61 Negative, 62 RemoveChannel, 63 Punch 64 }; 65 enum MirrorOrientation 66 { 67 Vertical = 1, 68 Horizontal = 2 69 }; 70 enum AlgorithmMethod 71 { 72 CorrelationCoefficient, 73 CrossCorrelation, 74 SquaredDifference 75 }; 76 77 static QScriptValue constructor(QScriptContext *context, QScriptEngine *engine); 78 static QScriptValue constructor(const QImage &image, QScriptEngine *engine); 79 80 static QScriptValue takeScreenshot(QScriptContext *context, QScriptEngine *engine); 81 static QScriptValue takeScreenshotUsingScreenIndex(QScriptContext *context, QScriptEngine *engine); 82 83 static void registerClass(QScriptEngine *scriptEngine); 84 85 Image(); 86 Image(const Image &other); 87 Image(const QImage &image); 88 Image(const QString &filename); 89 90 Image &operator=(Image other); 91 Image &operator=(QImage image); 92 93 void swap(Image &other); 94 void swap(QImage &image); 95 96 const QImage &image() const; 97 additionalMemoryCost()98 int additionalMemoryCost() const override { return mImage.byteCount(); } 99 100 public slots: 101 QScriptValue clone() const; 102 bool equals(const QScriptValue &other) const override ; 103 QString toString() const override ; 104 QScriptValue setData(const QScriptValue &data); 105 QScriptValue data(const QString &format = QStringLiteral("BMP")) const; 106 QScriptValue loadFromFile(const QString &filename); 107 QScriptValue saveToFile(const QString &filename) const; 108 QScriptValue applyFilter(Filter filter, const QScriptValue &options = QScriptValue()); 109 QScriptValue pixel(int x, int y) const; 110 QScriptValue setPixel(int x, int y, const QScriptValue &color); 111 QScriptValue pixels() const; 112 QScriptValue pixelData() const; 113 QScriptValue mirror(MirrorOrientation mirrorOrientation); 114 QScriptValue setSize(); 115 QScriptValue size() const; 116 int width() const; 117 int height() const; 118 QScriptValue copy() const; 119 QScriptValue findSubImage(const QScriptValue &otherImage, const QScriptValue &options = QScriptValue()) const; 120 QScriptValue findSubImages(const QScriptValue &otherImage, const QScriptValue &options = QScriptValue()) const; 121 QScriptValue findSubImageAsync(const QScriptValue &otherImage, const QScriptValue &callback, const QScriptValue &options = QScriptValue()); 122 QScriptValue findSubImagesAsync(const QScriptValue &otherImage, const QScriptValue &callback, const QScriptValue &options = QScriptValue()); 123 124 private slots: 125 void findSubImageAsyncFinished(const ActionTools::MatchingPointList &matchingPointList); 126 127 private: 128 void findSubImageOptions(const QScriptValue &options, int *confidenceMinimum, int *downPyramidCount, int *searchExpansion, AlgorithmMethod *method, int *maximumMatches = nullptr) const; 129 130 enum FilterOption 131 { 132 FilterChannels = QtImageFilter::FilterChannels, 133 FilterBorderPolicy = QtImageFilter::FilterBorderPolicy, 134 ConvolutionDivisor = QtImageFilter::ConvolutionDivisor, 135 ConvolutionBias = QtImageFilter::ConvolutionBias, 136 Radius = QtImageFilter::Radius, 137 Force = QtImageFilter::Force, 138 Center = QtImageFilter::Center 139 }; 140 141 static const QString filterNames[]; 142 static const QStringList filterOptionsNames; 143 144 QImage mImage; 145 ActionTools::OpenCVAlgorithms *mOpenCVAlgorithms; 146 QScriptValue mFindSubImageAsyncFunction; 147 bool mFindSubImageSearchForOne{false}; 148 }; 149 } 150 151