diff --git a/windows/Acid.Cam.Qt.Windows.March.2019/.gitignore b/windows/Acid.Cam.Qt.Windows.March.2019/.gitignore
new file mode 100755
index 0000000..c17485e
--- /dev/null
+++ b/windows/Acid.Cam.Qt.Windows.March.2019/.gitignore
@@ -0,0 +1 @@
+*DS_Store
diff --git a/windows/Acid.Cam.Qt.Windows.March.2019/AcidCam.pro b/windows/Acid.Cam.Qt.Windows.March.2019/AcidCam.pro
new file mode 100755
index 0000000..29fabd7
--- /dev/null
+++ b/windows/Acid.Cam.Qt.Windows.March.2019/AcidCam.pro
@@ -0,0 +1,17 @@
+######################################################################
+# Automatically generated by qmake (2.01a) Wed Feb 1 02:31:01 2017
+######################################################################
+
+TEMPLATE = app
+TARGET = Acid.Cam.v2.Qt
+RC_FILE = win-icon.rc
+QT += core gui widgets
+DEPENDPATH += .
+INCLUDEPATH += . C:\OpenCV\opencv\build\include /usr/include/ /usr/local/include
+LIBS += C:/OpenCV/opencv/build/x64/vc15/lib/opencv_world341.lib -luser32 -lgdi32
+#QMAKE_CXXFLAGS += -std=c++11
+RESOURCES += qresource.qrc
+
+# Input
+HEADERS += main_window.h new_dialog.h plugin.h qtheaders.h select_image.h ac.h fractal.h display_window.h playback_thread.h ac.h fractal.h search_box.h goto_window.h chroma_window.h user_define.h ac-filtercat.h
+SOURCES += main.cpp main_window.cpp new_dialog.cpp plugin.cpp select_image.cpp fractal.cpp display_window.cpp playback_thread.cpp search_box.cpp user_define.cpp fractal.cpp ac-alpha.cpp ac-obj.cpp ac-util.cpp ac-square.cpp ac-particle.cpp ac-grid.cpp ac-basic.cpp ac-filter1.cpp ac-filter2.cpp ac-filter3.cpp ac-filter4.cpp ac-filter5.cpp ac-filter6.cpp ac-filter7.cpp ac-filter8.cpp ac-filter9.cpp ac-filter10.cpp ac-filter11.cpp ac-filter12.cpp ac-filter13.cpp ac-filter14.cpp ac-filter15.cpp ac-filter16.cpp ac-filter17.cpp ac-image.cpp ac-box.cpp chroma_window.cpp goto_window.cpp ac-filtercat.cpp
diff --git a/windows/Acid.Cam.Qt.Windows.March.2019/AcidCam.pro.user b/windows/Acid.Cam.Qt.Windows.March.2019/AcidCam.pro.user
new file mode 100755
index 0000000..a1df151
--- /dev/null
+++ b/windows/Acid.Cam.Qt.Windows.March.2019/AcidCam.pro.user
@@ -0,0 +1,318 @@
+
+
+
+
+
+ EnvironmentId
+ {9c760219-7f46-4776-929b-24f16573a356}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ 80
+ true
+ true
+ 1
+ true
+ false
+ 0
+ true
+ true
+ 0
+ 8
+ true
+ 1
+ true
+ true
+ true
+ false
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop Qt 5.10.1 MSVC2015 64bit
+ Desktop Qt 5.10.1 MSVC2015 64bit
+ qt.qt5.5101.win64_msvc2015_64_kit
+ 1
+ 0
+ 0
+
+ C:/build-AcidCam-Desktop_Qt_5_10_1_MSVC2015_64bit-Debug
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ false
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Debug
+ Debug
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+ true
+
+
+ C:/build-AcidCam-Desktop_Qt_5_10_1_MSVC2015_64bit-Release
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+
+ false
+ false
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Release
+ Release
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ true
+
+
+ C:/build-AcidCam-Desktop_Qt_5_10_1_MSVC2015_64bit-Profile
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ true
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Profile
+ Profile
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ true
+
+ 3
+
+
+ 0
+ Deploy
+
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+ Deploy Configuration
+
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+ AcidCam
+ AcidCam2
+ Qt4ProjectManager.Qt4RunConfiguration:C:/Acid.Cam.New/NewOne/Acid.Cam.Build/AcidCam.pro
+ true
+
+ AcidCam.pro
+ false
+
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 18
+
+
+ Version
+ 18
+
+
diff --git a/windows/Acid.Cam.Qt.Windows.March.2019/Makefile b/windows/Acid.Cam.Qt.Windows.March.2019/Makefile
new file mode 100755
index 0000000..8ff61a7
--- /dev/null
+++ b/windows/Acid.Cam.Qt.Windows.March.2019/Makefile
@@ -0,0 +1,461 @@
+#############################################################################
+# Makefile for building: Acid_Cam_v2_Qt.app/Contents/MacOS/Acid_Cam_v2_Qt
+# Generated by qmake (2.01a) (Qt 4.8.7) on: Tue Feb 12 18:32:55 2019
+# Project: Acid.Cam.v2.Linux.Qt.pro
+# Template: app
+# Command: /usr/local/bin/qmake -o Makefile Acid.Cam.v2.Linux.Qt.pro
+#############################################################################
+
+####### Compiler, tools and options
+
+CC = clang
+CXX = clang++
+DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
+CFLAGS = -pipe -mmacosx-version-min=10.7 -O2 -arch x86_64 -Wall -W $(DEFINES)
+CXXFLAGS = -pipe -stdlib=libc++ -mmacosx-version-min=10.7 -std=c++11 `pkg-config acidcam opencv --cflags` -O2 -arch x86_64 -Wall -W $(DEFINES)
+INCPATH = -I/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/unsupported/macx-clang-libc++ -I. -I/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib/QtCore.framework/Versions/4/Headers -I/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib/QtCore.framework/Versions/4/Headers -I/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib/QtGui.framework/Versions/4/Headers -I/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib/QtGui.framework/Versions/4/Headers -I/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/include -I. -I/usr/include -I/Volumes/LostDrive-6/Users/jared/usr.local/local/include -I. -F/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib
+LINK = clang++
+LFLAGS = -headerpad_max_install_names -stdlib=libc++ -mmacosx-version-min=10.7 -arch x86_64
+LIBS = $(SUBLIBS) -F/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib -L/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib `pkg-config acidcam opencv --libs` -framework QtGui -L/Volumes/LostDrive-6/Users/jared/usr.local/local/opt/openssl/lib -L/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib -F/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib -framework QtCore
+AR = ar cq
+RANLIB = ranlib -s
+QMAKE = /usr/local/bin/qmake
+TAR = tar -cf
+COMPRESS = gzip -9f
+COPY = cp -f
+SED = sed
+COPY_FILE = cp -f
+COPY_DIR = cp -f -R
+STRIP =
+INSTALL_FILE = $(COPY_FILE)
+INSTALL_DIR = $(COPY_DIR)
+INSTALL_PROGRAM = $(COPY_FILE)
+DEL_FILE = rm -f
+SYMLINK = ln -f -s
+DEL_DIR = rmdir
+MOVE = mv -f
+CHK_DIR_EXISTS= test -d
+MKDIR = mkdir -p
+export MACOSX_DEPLOYMENT_TARGET = 10.7
+
+####### Output directory
+
+OBJECTS_DIR = ./
+
+####### Files
+
+SOURCES = main.cpp \
+ main_window.cpp \
+ new_dialog.cpp \
+ plugin.cpp \
+ select_image.cpp \
+ display_window.cpp \
+ playback_thread.cpp \
+ search_box.cpp \
+ goto_window.cpp \
+ chroma_window.cpp \
+ user_define.cpp moc_main_window.cpp \
+ moc_new_dialog.cpp \
+ moc_display_window.cpp \
+ moc_playback_thread.cpp \
+ moc_search_box.cpp \
+ moc_goto_window.cpp \
+ moc_chroma_window.cpp \
+ moc_user_define.cpp \
+ qrc_qresource.cpp
+OBJECTS = main.o \
+ main_window.o \
+ new_dialog.o \
+ plugin.o \
+ select_image.o \
+ display_window.o \
+ playback_thread.o \
+ search_box.o \
+ goto_window.o \
+ chroma_window.o \
+ user_define.o \
+ moc_main_window.o \
+ moc_new_dialog.o \
+ moc_display_window.o \
+ moc_playback_thread.o \
+ moc_search_box.o \
+ moc_goto_window.o \
+ moc_chroma_window.o \
+ moc_user_define.o \
+ qrc_qresource.o
+DIST = /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/unix.conf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/mac.conf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/gcc-base.conf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/gcc-base-macx.conf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/clang.conf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/qconfig.pri \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/modules/qt_webkit_version.pri \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/qt_functions.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/qt_config.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/exclusive_builds.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/default_pre.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/default_pre.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/release.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/default_post.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/default_post.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/x86_64.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/objective_c.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/shared.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/warn_on.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/qt.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/unix/thread.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/moc.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/rez.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/sdk.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/resources.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/uic.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/yacc.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/lex.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/include_source_dir.prf \
+ Acid.Cam.v2.Linux.Qt.pro
+QMAKE_TARGET = Acid_Cam_v2_Qt
+DESTDIR =
+TARGET = Acid_Cam_v2_Qt.app/Contents/MacOS/Acid_Cam_v2_Qt
+
+####### Custom Compiler Variables
+QMAKE_COMP_QMAKE_OBJECTIVE_CFLAGS = -pipe \
+ -O2 \
+ -arch \
+ x86_64 \
+ -Wall \
+ -W
+
+
+first: all
+####### Implicit rules
+
+.SUFFIXES: .o .c .cpp .cc .cxx .C
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
+
+####### Build rules
+
+all: Makefile Acid_Cam_v2_Qt.app/Contents/PkgInfo Acid_Cam_v2_Qt.app/Contents/Resources/empty.lproj Acid_Cam_v2_Qt.app/Contents/Info.plist $(TARGET)
+
+$(TARGET): $(OBJECTS)
+ @$(CHK_DIR_EXISTS) Acid_Cam_v2_Qt.app/Contents/MacOS/ || $(MKDIR) Acid_Cam_v2_Qt.app/Contents/MacOS/
+ $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
+
+Makefile: Acid.Cam.v2.Linux.Qt.pro /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/unsupported/macx-clang-libc++/qmake.conf /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/unix.conf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/mac.conf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/gcc-base.conf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/gcc-base-macx.conf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/clang.conf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/qconfig.pri \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/modules/qt_webkit_version.pri \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/qt_functions.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/qt_config.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/exclusive_builds.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/default_pre.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/default_pre.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/release.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/default_post.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/default_post.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/x86_64.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/objective_c.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/shared.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/warn_on.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/qt.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/unix/thread.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/moc.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/rez.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/sdk.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/resources.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/uic.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/yacc.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/lex.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/include_source_dir.prf \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib/QtGui.framework/QtGui.prl \
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib/QtCore.framework/QtCore.prl
+ $(QMAKE) -o Makefile Acid.Cam.v2.Linux.Qt.pro
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/unix.conf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/mac.conf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/gcc-base.conf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/gcc-base-macx.conf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/common/clang.conf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/qconfig.pri:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/modules/qt_webkit_version.pri:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/qt_functions.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/qt_config.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/exclusive_builds.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/default_pre.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/default_pre.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/release.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/default_post.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/default_post.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/x86_64.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/objective_c.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/shared.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/warn_on.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/qt.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/unix/thread.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/moc.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/rez.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/mac/sdk.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/resources.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/uic.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/yacc.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/lex.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/features/include_source_dir.prf:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib/QtGui.framework/QtGui.prl:
+/Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/lib/QtCore.framework/QtCore.prl:
+qmake: FORCE
+ @$(QMAKE) -o Makefile Acid.Cam.v2.Linux.Qt.pro
+
+Acid_Cam_v2_Qt.app/Contents/PkgInfo:
+ @$(CHK_DIR_EXISTS) Acid_Cam_v2_Qt.app/Contents || $(MKDIR) Acid_Cam_v2_Qt.app/Contents
+ @$(DEL_FILE) Acid_Cam_v2_Qt.app/Contents/PkgInfo
+ @echo "APPL????" >Acid_Cam_v2_Qt.app/Contents/PkgInfo
+Acid_Cam_v2_Qt.app/Contents/Resources/empty.lproj:
+ @$(CHK_DIR_EXISTS) Acid_Cam_v2_Qt.app/Contents/Resources || $(MKDIR) Acid_Cam_v2_Qt.app/Contents/Resources
+ @touch Acid_Cam_v2_Qt.app/Contents/Resources/empty.lproj
+
+Acid_Cam_v2_Qt.app/Contents/Info.plist:
+ @$(CHK_DIR_EXISTS) Acid_Cam_v2_Qt.app/Contents || $(MKDIR) Acid_Cam_v2_Qt.app/Contents
+ @$(DEL_FILE) Acid_Cam_v2_Qt.app/Contents/Info.plist
+ @sed -e "s,@SHORT_VERSION@,1.0,g" -e "s,@TYPEINFO@,????,g" -e "s,@ICON@,,g" -e "s,@EXECUTABLE@,Acid_Cam_v2_Qt,g" -e "s,@TYPEINFO@,????,g" /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/mkspecs/unsupported/macx-clang-libc++/Info.plist.app >Acid_Cam_v2_Qt.app/Contents/Info.plist
+dist:
+ @$(CHK_DIR_EXISTS) .tmp/Acid_Cam_v2_Qt1.0.0 || $(MKDIR) .tmp/Acid_Cam_v2_Qt1.0.0
+ $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/Acid_Cam_v2_Qt1.0.0/ && $(COPY_FILE) --parents main_window.h new_dialog.h plugin.h qtheaders.h select_image.h display_window.h playback_thread.h search_box.h goto_window.h chroma_window.h user_define.h .tmp/Acid_Cam_v2_Qt1.0.0/ && $(COPY_FILE) --parents qresource.qrc .tmp/Acid_Cam_v2_Qt1.0.0/ && $(COPY_FILE) --parents main.cpp main_window.cpp new_dialog.cpp plugin.cpp select_image.cpp display_window.cpp playback_thread.cpp search_box.cpp goto_window.cpp chroma_window.cpp user_define.cpp .tmp/Acid_Cam_v2_Qt1.0.0/ && (cd `dirname .tmp/Acid_Cam_v2_Qt1.0.0` && $(TAR) Acid_Cam_v2_Qt1.0.0.tar Acid_Cam_v2_Qt1.0.0 && $(COMPRESS) Acid_Cam_v2_Qt1.0.0.tar) && $(MOVE) `dirname .tmp/Acid_Cam_v2_Qt1.0.0`/Acid_Cam_v2_Qt1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/Acid_Cam_v2_Qt1.0.0
+
+
+clean:compiler_clean
+ -$(DEL_FILE) $(OBJECTS)
+ -$(DEL_FILE) *~ core *.core
+
+
+####### Sub-libraries
+
+distclean: clean
+ -$(DEL_FILE) -r Acid_Cam_v2_Qt.app
+ -$(DEL_FILE) Makefile
+
+
+check: first
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+compiler_objective_c_make_all:
+compiler_objective_c_clean:
+compiler_moc_header_make_all: moc_main_window.cpp moc_new_dialog.cpp moc_display_window.cpp moc_playback_thread.cpp moc_search_box.cpp moc_goto_window.cpp moc_chroma_window.cpp moc_user_define.cpp
+compiler_moc_header_clean:
+ -$(DEL_FILE) moc_main_window.cpp moc_new_dialog.cpp moc_display_window.cpp moc_playback_thread.cpp moc_search_box.cpp moc_goto_window.cpp moc_chroma_window.cpp moc_user_define.cpp
+moc_main_window.cpp: qtheaders.h \
+ new_dialog.h \
+ display_window.h \
+ playback_thread.h \
+ search_box.h \
+ main_window.h \
+ goto_window.h \
+ chroma_window.h \
+ user_define.h \
+ main_window.h
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ main_window.h -o moc_main_window.cpp
+
+moc_new_dialog.cpp: qtheaders.h \
+ new_dialog.h
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ new_dialog.h -o moc_new_dialog.cpp
+
+moc_display_window.cpp: qtheaders.h \
+ display_window.h
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ display_window.h -o moc_display_window.cpp
+
+moc_playback_thread.cpp: qtheaders.h \
+ playback_thread.h
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ playback_thread.h -o moc_playback_thread.cpp
+
+moc_search_box.cpp: qtheaders.h \
+ main_window.h \
+ new_dialog.h \
+ display_window.h \
+ playback_thread.h \
+ search_box.h \
+ goto_window.h \
+ chroma_window.h \
+ user_define.h \
+ search_box.h
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ search_box.h -o moc_search_box.cpp
+
+moc_goto_window.cpp: qtheaders.h \
+ display_window.h \
+ playback_thread.h \
+ goto_window.h
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ goto_window.h -o moc_goto_window.cpp
+
+moc_chroma_window.cpp: qtheaders.h \
+ chroma_window.h
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ chroma_window.h -o moc_chroma_window.cpp
+
+moc_user_define.cpp: qtheaders.h \
+ user_define.h
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/bin/moc $(DEFINES) $(INCPATH) -D__APPLE__ -D__GNUC__ user_define.h -o moc_user_define.cpp
+
+compiler_rcc_make_all: qrc_qresource.cpp
+compiler_rcc_clean:
+ -$(DEL_FILE) qrc_qresource.cpp
+qrc_qresource.cpp: qresource.qrc \
+ images/icon.png
+ /Volumes/LostDrive-6/Users/jared/usr.local/local/Cellar/qt/4.8.7_2/bin/rcc -name qresource qresource.qrc -o qrc_qresource.cpp
+
+compiler_image_collection_make_all: qmake_image_collection.cpp
+compiler_image_collection_clean:
+ -$(DEL_FILE) qmake_image_collection.cpp
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_rez_source_make_all:
+compiler_rez_source_clean:
+compiler_uic_make_all:
+compiler_uic_clean:
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_header_clean compiler_rcc_clean
+
+####### Compile
+
+main.o: main.cpp qtheaders.h \
+ main_window.h \
+ new_dialog.h \
+ display_window.h \
+ playback_thread.h \
+ search_box.h \
+ goto_window.h \
+ chroma_window.h \
+ user_define.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp
+
+main_window.o: main_window.cpp main_window.h \
+ qtheaders.h \
+ new_dialog.h \
+ display_window.h \
+ playback_thread.h \
+ search_box.h \
+ goto_window.h \
+ chroma_window.h \
+ user_define.h \
+ plugin.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main_window.o main_window.cpp
+
+new_dialog.o: new_dialog.cpp new_dialog.h \
+ qtheaders.h \
+ main_window.h \
+ display_window.h \
+ playback_thread.h \
+ search_box.h \
+ goto_window.h \
+ chroma_window.h \
+ user_define.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o new_dialog.o new_dialog.cpp
+
+plugin.o: plugin.cpp plugin.h \
+ qtheaders.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o plugin.o plugin.cpp
+
+select_image.o: select_image.cpp select_image.h \
+ qtheaders.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o select_image.o select_image.cpp
+
+display_window.o: display_window.cpp display_window.h \
+ qtheaders.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o display_window.o display_window.cpp
+
+playback_thread.o: playback_thread.cpp playback_thread.h \
+ qtheaders.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o playback_thread.o playback_thread.cpp
+
+search_box.o: search_box.cpp search_box.h \
+ qtheaders.h \
+ main_window.h \
+ new_dialog.h \
+ display_window.h \
+ playback_thread.h \
+ goto_window.h \
+ chroma_window.h \
+ user_define.h \
+ tokenize.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o search_box.o search_box.cpp
+
+goto_window.o: goto_window.cpp goto_window.h \
+ qtheaders.h \
+ display_window.h \
+ playback_thread.h \
+ main_window.h \
+ new_dialog.h \
+ search_box.h \
+ chroma_window.h \
+ user_define.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o goto_window.o goto_window.cpp
+
+chroma_window.o: chroma_window.cpp chroma_window.h \
+ qtheaders.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o chroma_window.o chroma_window.cpp
+
+user_define.o: user_define.cpp user_define.h \
+ qtheaders.h \
+ main_window.h \
+ new_dialog.h \
+ display_window.h \
+ playback_thread.h \
+ search_box.h \
+ goto_window.h \
+ chroma_window.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o user_define.o user_define.cpp
+
+moc_main_window.o: moc_main_window.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_main_window.o moc_main_window.cpp
+
+moc_new_dialog.o: moc_new_dialog.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_new_dialog.o moc_new_dialog.cpp
+
+moc_display_window.o: moc_display_window.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_display_window.o moc_display_window.cpp
+
+moc_playback_thread.o: moc_playback_thread.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_playback_thread.o moc_playback_thread.cpp
+
+moc_search_box.o: moc_search_box.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_search_box.o moc_search_box.cpp
+
+moc_goto_window.o: moc_goto_window.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_goto_window.o moc_goto_window.cpp
+
+moc_chroma_window.o: moc_chroma_window.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_chroma_window.o moc_chroma_window.cpp
+
+moc_user_define.o: moc_user_define.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_user_define.o moc_user_define.cpp
+
+qrc_qresource.o: qrc_qresource.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_qresource.o qrc_qresource.cpp
+
+####### Install
+
+install: FORCE
+
+uninstall: FORCE
+
+FORCE:
+
diff --git a/windows/Acid.Cam.Qt.Windows.March.2019/README.md b/windows/Acid.Cam.Qt.Windows.March.2019/README.md
new file mode 100755
index 0000000..a14f974
--- /dev/null
+++ b/windows/Acid.Cam.Qt.Windows.March.2019/README.md
@@ -0,0 +1,12 @@
+# Example pro file for Windows
+
+Replace the hardcoded paths with the ones you have for your current version of OpenCV compiled with Visual Studio.
+Copy this pro into a new directory with the source files and qrc file.
+
+Also copy ac.h ac.cpp fractal.h fractal.cpp from libacidcam into the directory as well they can be found here:
+
+https://github.com/lostjared/libacidcam/tree/master/source
+
+Using Qt Creator call qmake on the file and it will build Makefiles for Visual Studio.
+
+
diff --git a/windows/Acid.Cam.Qt.Windows.March.2019/ac-alpha.cpp b/windows/Acid.Cam.Qt.Windows.March.2019/ac-alpha.cpp
new file mode 100755
index 0000000..c159367
--- /dev/null
+++ b/windows/Acid.Cam.Qt.Windows.March.2019/ac-alpha.cpp
@@ -0,0 +1,511 @@
+/*
+ * Software written by Jared Bruni https://github.com/lostjared
+
+ This software is dedicated to all the people that experience mental illness.
+
+ Website: http://lostsidedead.com
+ YouTube: http://youtube.com/LostSideDead
+ Instagram: http://instagram.com/jaredbruni
+ Twitter: http://twitter.com/jaredbruni
+ Facebook: http://facebook.com/LostSideDead0x
+
+ You can use this program free of charge and redistrubute it online as long
+ as you do not charge anything for this program. This program is meant to be
+ 100% free.
+
+ BSD 2-Clause License
+
+ Copyright (c) 2019, Jared Bruni
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ */
+
+
+#include "ac.h"
+
+// variables for changePixel
+int current_filterx = 0;
+int bytesPerSample = 0;
+int bytesPerRow = 0;
+int width = 0;
+int height = 0;
+int red = 0;
+int green = 0;
+int blue = 0;
+int offset = 0;
+int randomNumber = 0;
+int reverse = 0;
+bool negate = false;
+
+// changePixel for Alpha Flame Filters
+// this function is called once for each pixel in the source image
+void changePixel(cv::Mat &full_buffer, int i, int z, cv::Vec3b &buffer, double pos, double *count) {
+ //each case is a different operation on the RGB pixel values stored in buffer
+ switch(current_filterx) {
+ case 0:
+ {
+ double value = pos;
+ buffer[0] = static_cast(value*buffer[0]);
+ buffer[1] = static_cast(value*buffer[1]);
+ buffer[2] = static_cast(value*buffer[2]);
+ }
+ break;
+ case 1:
+ {
+ double value = pos;
+ buffer[0] = static_cast(value*buffer[0]);
+ buffer[1] = static_cast((-value)*buffer[1]);
+ buffer[2] = static_cast(value*buffer[2]);
+ }
+ break;
+ case 2:
+ {
+ buffer[0] += static_cast(buffer[0]*-pos);
+ buffer[1] += static_cast(buffer[1]*pos);
+ buffer[2] += static_cast(buffer[2]*-pos);
+ }
+ break;
+ case 3:
+ {
+ int current_pos = static_cast(pos*0.2f);
+ buffer[0] = static_cast((i*current_pos)+buffer[0]);
+ buffer[2] = static_cast((z*current_pos)+buffer[2]);
+ buffer[1] = static_cast((current_pos*buffer[1]));
+ }
+ break;
+ case 4:
+ {
+ int current_pos = static_cast(pos*0.2f);
+ buffer[0] = static_cast((z*current_pos)+buffer[0]);
+ buffer[1] = static_cast((i*current_pos)+buffer[1]);
+ buffer[2] = static_cast(((i+z)*current_pos)+buffer[2]);
+ }
+ break;
+ case 5:
+ {
+ int current_pos = static_cast(pos*0.2f);
+ buffer[0] = static_cast(-(z*current_pos)+buffer[0]);
+ buffer[1] = static_cast(-(i*current_pos)+buffer[1]);
+ buffer[2] = static_cast(-((i+z)*current_pos)+buffer[2]);
+ }
+ break;
+
+ case 6:
+ {
+ int zq = z+1, iq = i+1;
+ if(zq > height-1 || iq > width-1) return;
+ cv::Vec3b &temp = full_buffer.at(zq, iq);
+ buffer[0] += static_cast((i*pos)+temp[0]);
+ buffer[1] += static_cast((z*pos)+temp[1]);
+ buffer[2] += static_cast((i/(z+1))+temp[2]);
+ }
+ break;
+ case 7:
+ {
+ unsigned char colv[4], cola[4];
+ colv[0] = buffer[0];
+ colv[1] = buffer[1];
+ colv[2] = buffer[2];
+ cola[0] = buffer[2];
+ cola[1] = buffer[1];
+ cola[2] = buffer[0];
+ int alpha = (int)pos;
+ int red_values[] = { colv[0]+cola[2], colv[1]+cola[1], colv[2]+cola[0], 0 };
+ int green_values[] = { colv[2]+cola[0], colv[1]+cola[1], colv[0]+cola[2], 0 };
+ int blue_values[] = { colv[1]+cola[1], colv[0]+cola[2], colv[2]+cola[0], 0 };
+ unsigned char R = 0,G = 0,B = 0;
+ for(int iq = 0; iq <= 2; ++iq) {
+ R += red_values[iq];
+ R /= 3;
+ G += green_values[iq];
+ G /= 3;
+ B += blue_values[iq];
+ B /= 3;
+ }
+ buffer[0] += static_cast(alpha*R);
+ buffer[1] += static_cast(alpha*G);
+ buffer[2] += static_cast(alpha*B);
+ }
+ break;
+ case 8:
+ {
+ unsigned char colv[4], cola[4];
+ colv[0] = buffer[0];
+ colv[1] = buffer[1];
+ colv[2] = buffer[2];
+ int iq = (width-i-1);
+ int zq = (height-z-1);
+ cv::Vec3b &t = full_buffer.at(zq, iq);
+ cola[0] = t[0];
+ cola[1] = t[1];
+ cola[2] = t[2];
+ int alpha = (int)pos;
+ int red_values[] = { colv[0]+cola[2], colv[1]+cola[1], colv[2]+cola[0], 0 };
+ int green_values[] = { colv[2]+cola[0], colv[1]+cola[1], colv[0]+cola[2], 0 };
+ int blue_values[] = { colv[1]+cola[1], colv[0]+cola[2], colv[2]+cola[0], 0 };
+ unsigned char R = 0,G = 0,B = 0;
+ for(int iq = 0; iq <= 2; ++iq) {
+ R += red_values[iq];
+ R /= 3;
+ G += green_values[iq];
+ G /= 3;
+ B += blue_values[iq];
+ B /= 3;
+ }
+ buffer[0] += static_cast(alpha*R);
+ buffer[1] += static_cast(alpha*G);
+ buffer[2] += static_cast(alpha*B);
+ }
+ break;
+ case 9:
+ {
+ double alpha = pos;
+ unsigned char colorz[3][3];
+ colorz[0][0] = buffer[0];
+ colorz[0][1] = buffer[1];
+ colorz[0][2] = buffer[2];
+ int total_r = colorz[0][0] +colorz[0][1]+colorz[0][2];
+ total_r /= 3;
+ total_r *= static_cast(alpha);
+ int iq = i+1;
+ if(iq > width) return;
+ int zq = z;
+ cv::Vec3b &temp = full_buffer.at(zq, iq);
+ colorz[1][0] = temp[0];
+ colorz[1][1] = temp[1];
+ colorz[1][2] = temp[2];
+ int total_g = colorz[1][0]+colorz[1][1]+colorz[1][2];
+ total_g /= 3;
+ total_g *= static_cast(alpha);
+ buffer[0] = static_cast(total_r);
+ buffer[1] = static_cast(total_g);
+ buffer[2] = static_cast(total_r+total_g*alpha);
+
+ }
+ break;
+ case 10:
+ {
+ buffer[0] = static_cast(((i+z)*pos)/(i+z+1)+buffer[0]*pos);
+ buffer[1] += static_cast(((i*pos)/(z+1))+buffer[1]);
+ buffer[2] += static_cast(((z*pos)/(i+1))+buffer[2]);
+ }
+ break;
+ case 11:
+ {
+ buffer[0] += static_cast((buffer[2]+(i*pos))/(pos+1));
+ buffer[1] += static_cast((buffer[1]+(z*pos))/(pos+1));
+ buffer[2] += buffer[0];
+ }
+ break;
+ case 12:
+ {
+ buffer[0] += static_cast((i/(z+1))*pos+buffer[0]);
+ buffer[1] += static_cast((z/(i+1))*pos+buffer[1]);
+ buffer[2] += static_cast(((i+z)/(pos+1)+buffer[2]));
+ }
+ break;
+ case 13:
+ {
+ buffer[0] += static_cast((pos*(i/(pos+1))+buffer[2]));
+ buffer[1] += static_cast((pos*(z/(pos+1))+buffer[1]));
+ buffer[2] += static_cast((pos*((i*z)/(pos+1)+buffer[0])));
+ }
+ break;
+ case 14:
+ {
+ buffer[0] = static_cast(((i+z)*pos)/(i+z+1)+buffer[0]*pos);
+ buffer[1] += static_cast((buffer[1]+(z*pos))/(pos+1));
+ buffer[2] += static_cast(((i+z)/(pos+1)+buffer[2]));
+ }
+ break;
+ case 15:
+ {
+ buffer[0] = static_cast((i%(z+1))*pos+buffer[0]);
+ buffer[1] = static_cast((z%(i+1))*pos+buffer[1]);
+ buffer[2] = static_cast((i+z%((int)pos+1))+buffer[2]);
+ }
+ break;
+ case 16:
+ {
+ int r = 0;
+ r = (buffer[0]+buffer[1]+buffer[2])/3;
+ buffer[0] += static_cast(pos*r);
+ buffer[1] += static_cast(-(pos*r));
+ buffer[2] += static_cast(pos*r);
+ }
+ break;
+ case 17:
+ {
+ unsigned long r = 0;;
+ r = static_cast((buffer[0]+buffer[1]+buffer[2])/(pos+1));
+ buffer[0] += static_cast(r*pos);
+ r = (buffer[0]+buffer[1]+buffer[2])/3;
+ buffer[1] += static_cast(r*pos);
+ r = (buffer[0]+buffer[1]+buffer[2])/5;
+ buffer[2] += static_cast(r*pos);
+ }
+ break;
+ case 18:
+ {
+ buffer[0] += static_cast(1+(sin(pos))*z);
+ buffer[1] += static_cast((1+cos(pos))*i);
+ buffer[2] += static_cast(((buffer[0]+buffer[1]+buffer[2])/3));
+ }
+ break;
+ case 19:
+ {
+ buffer[0] += static_cast(((buffer[2]-i)*((((int)pos+1)%15)+2)));
+ buffer[1] += static_cast(((buffer[1]-z)*((((int)pos+1)%15)+2)));
+ buffer[2] += static_cast((buffer[0]-(i+z)*((((int)pos+1)%15)+2)));
+ }
+ break;
+ case 20:
+ {
+ buffer[0] += static_cast((buffer[0]+buffer[1]-buffer[2])/3*pos);
+ buffer[1] -= static_cast((buffer[0]-buffer[1]+buffer[2])/6*pos);
+ buffer[2] += static_cast((buffer[0]-buffer[1]-buffer[2])/9*pos);
+ }
+ break;
+ case 21:
+ {
+ int iq = i, zq = z+1;
+ if(zq > height-2) return;
+ cv::Vec3b &temp = full_buffer.at(zq, iq);
+ zq = z+2;
+ if(zq > height-2) return;
+ cv::Vec3b &temp2 = full_buffer.at(zq, iq);
+ int ir, ig, ib;
+ ir = buffer[0]+temp[0]-temp2[0];
+ ig = buffer[1]-temp[1]+temp2[1];
+ ib = buffer[2]-temp[2]-temp2[2];
+ if(z%2 == 0) {
+ if(i%2 == 0) {
+ buffer[0] = static_cast(ir+(0.5*pos));
+ buffer[1] = static_cast(ig+(0.5*pos));
+ buffer[2] = static_cast(ib+(0.5*pos));
+ } else {
+ buffer[0] = static_cast(ir+(1.5*pos));
+ buffer[1] = static_cast(ig+(1.5*pos));
+ buffer[2] = static_cast(ib+(1.5*pos));
+ }
+ } else {
+ if(i%2 == 0) {
+ buffer[0] += static_cast(ir+(0.1*pos));
+ buffer[1] += static_cast(ig+(0.1*pos));
+ buffer[2] += static_cast(ib+(0.1*pos));
+ } else {
+ buffer[0] -= static_cast(ir+(i*pos));
+ buffer[1] -= static_cast(ig+(z*pos));
+ buffer[2] -= static_cast(ib+(0.1*pos));
+ }
+ }
+ }
+ break;
+ case 22:
+ {
+ if((i%2) == 0) {
+ if((z%2) == 0) {
+ buffer[0] = static_cast(1-pos*buffer[0]);
+ buffer[2] = static_cast((i+z)*pos);
+ } else {
+ buffer[0] = static_cast(pos*buffer[0]-z);
+ buffer[2] = static_cast((i-z)*pos);
+ }
+ } else {
+ if((z%2) == 0) {
+ buffer[0] = static_cast(pos*buffer[0]-i);
+ buffer[2] = static_cast((i-z)*pos);
+ } else {
+ buffer[0] = static_cast(pos*buffer[0]-z);
+ buffer[2] = static_cast((i+z)*pos);
+ }
+ }
+ }
+ break;
+ case 23:
+ {
+ buffer[0] = static_cast(buffer[0]+buffer[1]*2+pos);
+ buffer[1] = static_cast(buffer[1]+buffer[0]*2+pos);
+ buffer[2] = static_cast(buffer[2]+buffer[0]+pos);
+ }
+ break;
+ case 24:
+ {
+ buffer[0] += static_cast(buffer[2]+pos);
+ buffer[1] += static_cast(buffer[1]+pos);
+ buffer[2] += static_cast(buffer[0]+pos);
+ }
+ break;
+ case 25:
+ {
+ buffer[0] += static_cast((buffer[2]*pos));
+ buffer[1] += static_cast((buffer[0]*pos));
+ buffer[2] += static_cast((buffer[1]*pos));
+ }
+ break;
+ case 26:
+ {
+ buffer[0] += static_cast((buffer[2]*pos)+i);
+ buffer[1] += static_cast((buffer[0]*pos)+z);
+ buffer[2] += static_cast((buffer[1]*pos)+i-z);
+ }
+ break;
+ case 27:
+ {
+ buffer[0] = static_cast((-buffer[2])+z);
+ buffer[1] = static_cast((-buffer[0])+i);
+ buffer[2] = static_cast((-buffer[1])+pos);
+ }
+ break;
+ case 28:
+ {
+ buffer[0] = static_cast(buffer[2]+(1+(i*z)/pos));
+ buffer[1] = static_cast(buffer[1]+(1+(i*z)/pos));
+ buffer[2] = static_cast(buffer[0]+(1+(i*z)/pos));
+ }
+ break;
+ case 29:
+ {
+ int iq = i, zq = z+1;
+ if(zq > height-2) return;
+ cv::Vec3b &temp = full_buffer.at(zq, iq);
+ zq = z+2;
+ if(zq > height-2) return;
+ cv::Vec3b &temp2 = full_buffer.at(zq, iq);
+ zq = z+3;
+ if(zq > height-2) return;
+ cv::Vec3b &temp3 = full_buffer.at(zq, iq);
+ zq = z+4;
+ if(zq > height-2) return;
+ cv::Vec3b &temp4 = full_buffer.at(zq, iq);
+ unsigned char col[4];
+ col[0] = static_cast((temp[0]+temp2[0]+temp3[0]+temp4[0])/4);
+ col[1] = static_cast((temp[1]+temp2[1]+temp3[1]+temp4[1])/4);
+ col[2] = static_cast((temp[2]+temp2[2]+temp3[2]+temp4[2])/4);
+ buffer[0] = static_cast(col[0]*pos);
+ buffer[1] = static_cast(col[1]*pos);
+ buffer[2] = static_cast(col[2]*pos);
+ }
+ break;
+ case 30:
+ {
+ double rad = 100.0;
+ double degree = 0.01*pos;
+ int x = static_cast(rad * (cos(degree)));
+ int y = static_cast(rad * sin(degree));
+ int z = static_cast(rad * tan(degree));
+ buffer[0] = static_cast(buffer[0]+x);
+ buffer[2] = static_cast(buffer[1]+y);
+ buffer[1] = static_cast(buffer[1]+z);
+ }
+ break;
+ case 31:
+ {
+ int average= static_cast((buffer[0]+buffer[1]+buffer[2]+1)/3);
+ buffer[0] += static_cast(buffer[2]+average*(pos));
+ buffer[1] += static_cast(buffer[0]+average*(pos));
+ buffer[2] += static_cast(buffer[1]+average*(pos));
+ }
+ break;
+ case 32:
+ {
+ int value = 0;
+ value = ~buffer[0] + ~buffer[1] + ~buffer[2];
+ value /= 2;
+ buffer[0] = static_cast(buffer[0]+value*pos);
+ value /= 2;
+ buffer[1] = static_cast(buffer[1]+value*pos);
+ value /= 2;
+ buffer[2] = static_cast(buffer[2]+value*pos);
+ }
+ break;
+ case 33:
+ {
+ buffer[0] += static_cast(*count*pos);
+ buffer[1] += static_cast(*count*pos);
+ buffer[2] += static_cast(*count*pos);
+ *count += 0.00001f;
+ if(*count > 255) *count = 0;
+ }
+ break;
+ case 34:
+ {
+ buffer[0] += static_cast(pos*(randomNumber+pos));
+ buffer[1] += static_cast(pos*(randomNumber+z));
+ buffer[2] += static_cast(pos*(randomNumber+i));
+ }
+ break;
+ case 35:
+ {
+ buffer[0] += static_cast(*count *z);
+ buffer[1] += static_cast(*count *pos);
+ buffer[2] += static_cast(*count *z);
+ *count += 0.0000001f;
+ }
+ break;
+ case 36:
+ {
+ buffer[0] += static_cast(sin(3.14+pos)*pos);
+ buffer[1] += static_cast(cos(3.14+pos)*pos);
+ buffer[2] += static_cast(tan(3.14+pos)*pos);
+ }
+ break;
+ }
+ buffer[0] += red;
+ buffer[1] += green;
+ buffer[2] += blue;
+ if(negate == true) {
+ buffer[0] = ~buffer[0];
+ buffer[1] = ~buffer[1];
+ buffer[2] = ~buffer[2];
+ }
+ unsigned char buf[3];
+ buf[0] = buffer[0];
+ buf[1] = buffer[1];
+ buf[2] = buffer[2];
+ switch(reverse) {
+ case 0://normal
+ break;
+ case 1:
+ buffer[0] = buf[2];
+ buffer[1] = buf[1];
+ buffer[2] = buf[0];
+ break;
+ case 2:
+ buffer[0] = buf[1];
+ buffer[1] = buf[2];
+ buffer[2] = buf[0];
+ break;
+ case 3:
+ buffer[0] = buf[2];
+ buffer[1] = buf[0];
+ buffer[2] = buf[1];
+ break;
+ case 4:
+ buffer[0] = buf[1];
+ buffer[1] = buf[0];
+ buffer[2] = buf[2];
+ break;
+ }
+}
diff --git a/windows/Acid.Cam.Qt.Windows.March.2019/ac-basic.cpp b/windows/Acid.Cam.Qt.Windows.March.2019/ac-basic.cpp
new file mode 100755
index 0000000..bc61a18
--- /dev/null
+++ b/windows/Acid.Cam.Qt.Windows.March.2019/ac-basic.cpp
@@ -0,0 +1,988 @@
+/*
+ * Software written by Jared Bruni https://github.com/lostjared
+
+ This software is dedicated to all the people that experience mental illness.
+
+ Website: http://lostsidedead.com
+ YouTube: http://youtube.com/LostSideDead
+ Instagram: http://instagram.com/jaredbruni
+ Twitter: http://twitter.com/jaredbruni
+ Facebook: http://facebook.com/LostSideDead0x
+
+ You can use this program free of charge and redistrubute it online as long
+ as you do not charge anything for this program. This program is meant to be
+ 100% free.
+
+ BSD 2-Clause License
+
+ Copyright (c) 2019, Jared Bruni
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ */
+
+#include"ac.h"
+#include"fractal.h"
+
+// SelfAlphaBlend - Perform out of Bounds AlphaBlend on source image
+void ac::SelfAlphaBlend(cv::Mat &frame) {
+ double alpha_inc = 0.1;
+ if(alpha_increase != 0) {
+ alpha_inc = alpha_increase;
+ } else {
+ alpha_inc = 0.1;
+ }
+ for(int z = 0; z < frame.rows; ++z) {// from top to bottom
+ for(int i = 0; i < frame.cols; ++i) {// from left to right
+ cv::Vec3b &colorval = frame.at(z, i);// at x,y
+ colorval[0] += static_cast(colorval[0]*alpha);
+ colorval[1] += static_cast(colorval[1]*alpha);
+ colorval[2] += static_cast(colorval[2]*alpha);
+ swapColors(frame, z, i);// swap colors
+ if(isNegative == true) { // if negative
+ invert(frame, z, i);// invert
+ }
+ }
+ }
+ static int direction = 1;// direction equals 1
+ if(direction == 1) {// if direction equals 1
+ alpha += alpha_inc; // plus equal 0.1
+ // if alpha greater than 10
+ if(alpha > 10) { alpha = 10; direction = 2; }
+ } else {
+ alpha -= alpha_inc; // minus equal 0.05
+ // if alpha <= 0.1f
+ if(alpha <= 0.1f) { alpha = 0.1f; direction = 1; }
+ }
+ resetAlpha(direction, alpha);
+}
+// Self Scale - Scale pixel values by double
+// Takes cv::Mat reference
+void ac::SelfScale(cv::Mat &frame) {
+ double inc_alpha = 0.05;
+ if(alpha_increase != 0)
+ inc_alpha = alpha_increase;
+ else
+ inc_alpha = 0.05;
+ static double pos = 1.0; // pos the scale
+ int w = frame.cols; // width variable
+ int h = frame.rows; // height variable
+ for(int z = 0; z < h; ++z) {// top to bottom
+ for(int i = 0; i < w; ++i) { // left to right
+ // current pixel at x,y
+ cv::Vec3b &pixel = frame.at(z, i);
+ // scale each rgb value by pos
+ pixel[0] = static_cast(pixel[0] * pos);
+ pixel[1] = static_cast(pixel[1] * pos);
+ pixel[2] = static_cast(pixel[2] * pos);
+ swapColors(frame, z, i);// swap colors
+ // if is negative set, invert pixel
+ if(isNegative) invert(frame, z, i);
+ }
+ }
+ // static direction variable
+ static int direction = 1;
+ static double pos_max = 7.0f; // position max
+ if(direction == 1) { // direction equals 1
+ pos += inc_alpha; // pos plus equal 0.05
+ if(pos > pos_max) { // pos greater than pos_max
+ pos = pos_max; // set pos to pos_max
+ direction = 0; // set direction to zero
+ pos_max += 0.5f; // add 0.5 to pos_max
+ }
+ } else if(direction == 0) { // direction is zero
+ pos += -inc_alpha; // minus equal 0.05
+ if(pos <= 1.0) { // pos <= 1.0
+ if(pos_max > 15) pos_max = 1.0f; // reset pos if greater than 15
+ direction = 1;// set direction to 1
+ }
+ }
+ resetAlpha(direction, pos);
+}
+// StrobeEffect - Change frame values by passIndex, incrememnt each frame
+void ac::StrobeEffect(cv::Mat &frame) {
+ static int passIndex = 0;// passIndex variable
+ static double alpha = 1.0f;// alpha is 1.0
+ for (int z = 0; z < frame.cols - 2; ++z) {
+ for (int i = 0; i < frame.rows - 2; ++i) {
+
+ cv::Vec3b &colors = frame.at(i, z); // current pixel
+
+ switch (passIndex) {
+ case 0: // pass 0 set color values
+ colors[0] = static_cast(colors[0] * (-alpha));
+ colors[1] = static_cast(colors[1] * alpha);
+ colors[2] = static_cast(colors[2] * alpha);
+ break;
+ case 1: // pass 1 set color values
+ colors[0] += static_cast(colors[0] * alpha);
+ colors[1] += static_cast(colors[1] * (-alpha));
+ colors[2] += static_cast(colors[2] * alpha);
+ break;
+ case 2: // pass 2 set color values
+ colors[0] = static_cast(colors[0] * alpha);
+ colors[1] = static_cast(colors[1] * alpha);
+ colors[2] = static_cast(colors[2] * (-alpha));
+ break;
+ case 3: { // pass 3 grab pixels +1, and +2 ahead and use for colors
+ cv::Vec3b &color1 = frame.at(i + 1, z);// x,y + 1
+ cv::Vec3b &color2 = frame.at(i + 2, z);// x,y + 2
+ // set colors accordingly
+ colors[0] += static_cast(colors[0] * alpha);
+ colors[1] += static_cast(color1[1] * alpha);
+ colors[2] += static_cast(color2[2] * alpha);
+ break;
+ }
+ }
+ // swap colors
+ swapColors(frame, i, z);
+ if(isNegative == true) { // if negative variable set
+ invert(frame, i, z);//invert pixel
+ }
+ }
+ }
+ ++passIndex; // pass index increased once each frame
+ if(passIndex > 3) passIndex = 0; // if greater than 3 set back to zero
+ static double max = 4.0f;// max
+ if(alpha < 0) // alpha less than zero
+ tr = translation_variable; // set as translation variable
+ else if(alpha > max) { // greater than max
+ tr = -translation_variable; // negative translation variable
+ max += 3.0f;// max plus equal 3.0
+ if(max > 23) max = 4.0f;// max greater than twenty three max equal four
+ }
+ alpha += tr; // change position
+}
+
+// Blend3
+// takes cv::Mat as reference
+void ac::Blend3(cv::Mat &frame) {
+ static int i=0,z=0;// set i,z to zero
+ static double rValue[3] = { 0, 0, 0 };
+ for (z = 0; z < frame.cols; ++z) {
+ for (i = 0; i < frame.rows; ++i) {
+ cv::Vec3b &color_value = frame.at(i, z); // get pixel value
+ for (int j = 0; j < 3; ++j)
+ color_value[j] += static_cast(color_value[j] * rValue[j]); // loop through each color multiply by rValue
+ // swap colors
+ swapColors(frame, i, z);
+ if(isNegative == true) {// if isNegative true
+ invert(frame, i, z);// invert pixel
+ }
+ }
+ }
+ // change rValue array based on random function
+ // set to either -0.1 or 0.1
+ double alpha_inc = 0.1;
+ if(alpha_increase != 0)
+ alpha_inc = alpha_increase;
+ else
+ alpha_inc = 0.1;
+
+
+ for (int q = 0; q < 3; ++q)
+ rValue[q] += ((rand() % 10) > 5) ? -alpha_inc : alpha_inc;
+}
+// takes cv::Mat reference
+void ac::NegParadox(cv::Mat &frame) {
+ static double alpha = 1.0f; // alpha equals 1.0
+ for (int z = 0; z < frame.cols - 3; ++z) { // left to right
+ for (int i = 0; i < frame.rows - 3; ++i) { // top to bottom
+ cv::Vec3b colors[4];// vector array
+ colors[0] = frame.at(i, z);// grab pixels
+ colors[1] = frame.at(i + 1, z);
+ colors[2] = frame.at(i + 2, z);
+ colors[3] = frame.at(i + 3, z);
+ cv::Vec3b &color_value = frame.at(i, z);// grab pixel
+ // set final pixel color values
+ color_value[0] += static_cast((colors[0][0] * alpha) + (colors[1][0] * alpha));
+ color_value[1] += static_cast((colors[1][1] * alpha) + (colors[3][1] * alpha));
+ color_value[2] += static_cast((colors[1][2] * alpha) + (colors[2][2] * alpha));
+ swapColors(frame, i, z); // swap the colors
+ if(isNegative == true) { // if negative is true
+ invert(frame, i, z);// invert pixel
+ }
+ }
+ }
+ static double trans_var = 0.1f; // translation variable
+ double translation_variable = (alpha_increase != 0) ? alpha_increase :0.1;
+ if (alpha < 0)
+ trans_var = translation_variable;// increase
+ else if (alpha > 15)
+ trans_var = -translation_variable; // decrease
+ alpha += trans_var; // add variable
+
+ resetAlpha(alpha);
+}
+
+// Thought Mode
+// takes cv::Mat reference
+void ac::ThoughtMode(cv::Mat &frame) {
+ static double alpha = 1.0f, trans_var = 0.1f; // alpha
+ static int mode = 0;// current mode
+ static int sw = 1, tr = 1;
+ for(int z = 2; z < frame.cols-2; ++z) {
+ for(int i = 2; i < frame.rows-4; ++i) {
+ cv::Vec3b &color_value = frame.at(i, z); // current pixel
+ // set pixel rgb values
+ if(sw == 1) color_value[0] += static_cast(color_value[mode]*alpha);
+ if(tr == 0) color_value[mode] -= static_cast(color_value[rand()%2]*alpha);
+ color_value[mode] += static_cast(color_value[mode]*alpha);
+ mode++; // increase mode
+ if(mode >= 3) mode = 0; // reset mode if greater than equal three
+ swapColors(frame, i, z);// swap colors
+ if(isNegative == true) { // if is negative true
+ invert(frame, i, z);// invert pixel
+ }
+ }
+ }
+ sw = !sw;// not sw
+ tr = !tr;// not tr
+ static double max = 4.0f;
+ if(alpha < 0)
+ trans_var = translation_variable;
+ else if(alpha > max) {
+ trans_var = -translation_variable;
+ max += 3.0f;
+ if(max > 23) max = 4.0f;
+ }
+ alpha += trans_var; // add to alpha
+ resetAlpha(alpha);
+}
+// blend with original pixel
+void ac::Pass2Blend(cv::Mat &frame) {
+ for(int z = 0; z < frame.rows; ++z) { // top to bottom
+ for(int i = 0; i < frame.cols; ++i) { // left to right
+ if(!frame.empty() && !orig_frame.empty()) {
+ cv::Vec3b &color1 = frame.at(z, i);// current pixel
+ cv::Vec3b color2 = orig_frame.at(z, i);// original frame pixel
+ for(int q = 0; q < 3; ++q)
+ color1[q] = static_cast(color2[q] * ac::pass2_alpha) + static_cast(color1[q] * ac::pass2_alpha);
+ //color1[q] = static_cast(color2[q]+(color1[q]*ac::pass2_alpha));// multiply
+ }
+ }
+ }
+}
+
+// Takes cv::Mat reference
+void ac::RandTriBlend(cv::Mat &frame) {
+ static double alpha = 1.0f;//alpha equals 1.0
+ static int i = 0, z = 0;// i,z loop variables
+ int counter = 0;// center variable
+ cv::Vec3b colors[6];// array of six colors
+ for (z = 2; z < frame.cols - 2; ++z) {
+ for (i = 2; i < frame.rows - 2; ++i) {
+ // grab pixels
+ colors[0] = frame.at(i, z);
+ colors[1] = frame.at(i + 1, z);
+ colors[2] = frame.at(i + 2, z);
+ // chaos
+ counter = rand() % 3;
+ if (counter == 0) { // if counter equals zero
+ // set pixel values
+ colors[3][0] = static_cast((colors[0][0] + colors[1][0] + colors[2][0]*alpha));
+ colors[3][1] = static_cast((colors[0][1] + colors[1][1]) * alpha);
+ colors[3][2] = static_cast((colors[0][2]) * alpha);
+ counter++; // increase counter
+ } else if (counter == 1) { // if counter equals one
+ // set pixel values
+ colors[3][0] = static_cast((colors[0][0]) * alpha);
+ colors[3][1] = static_cast((colors[0][1] + colors[1][1]) * alpha);
+ colors[3][2] = static_cast((colors[0][2] + colors[1][2] + colors[2][2]) * alpha);
+ counter++; // increase counter
+ } else {
+ // set pixel values
+ colors[3][0] = static_cast((colors[0][0]) * alpha);
+ colors[3][2] = static_cast((colors[0][1] + colors[1][1]) * alpha);
+ colors[3][1] = static_cast((colors[0][2] + colors[1][2] + colors[2][2]) * alpha);
+ }
+ cv::Vec3b &color_value = frame.at(i, z);// grab current pixel
+ color_value = colors[3];// assign pixel
+ swapColors(frame, i, z);// swap colors
+ if(isNegative == true) { // if isNegative
+ invert(frame, i, z);// invert pixel
+ }
+ }
+ }
+ static double max = 4.0f, trans_var = translation_variable;// max, translation variable
+ if (alpha < 0) // if alpha less than zero
+ trans_var = translation_variable;
+ else if (alpha > max) {
+ trans_var = -translation_variable;
+ max += 3.0f;
+ if (max > 23)
+ max = 4.0f;
+ }
+ alpha += trans_var;// add to alpha translation variable
+ resetAlpha(alpha);
+}
+
+// Blank
+// takes cv::Mat reference
+void ac::Blank(cv::Mat &frame) {
+ static double alpha = 1.0f; // static alpha set to 1.0
+ static unsigned char val[3] = { 0 };// val array set to zero
+ static bool color_switch = false;// color switch set to false
+ for(int z = 0; z < frame.cols; ++z) {// left to right
+ for(int i = 0; i < frame.rows; ++i) { // top to bottom
+ cv::Vec3b &color_value = frame.at(i, z); // current pixel
+ for(int j = 0; j < 3; ++j) {
+ // process pixel values
+ val[j] = static_cast((alpha*color_value[j]) / (2-j+1));
+ color_value[j] += static_cast(val[2-j] / (j+1));
+ if(color_switch == true) color_value[j] = static_cast(-color_value[j]);
+ }
+ swapColors(frame, i, z);
+ if(isNegative == true) {
+ invert(frame, i, z); // invert pixel
+ }
+ }
+ }
+ color_switch = !color_switch;// not color switch
+ static double max = 4.0f, trans_var = translation_variable;
+ if (alpha < 0)
+ trans_var = translation_variable; // positive (up)
+ else if (alpha > max) {
+ trans_var = -translation_variable; // negative (down)
+ max += 3.0f;
+ if (max > 23)
+ max = 4.0f;
+ }
+ alpha += trans_var; // add to alpha trans_Var
+ resetAlpha(alpha);
+}
+// Tri
+// takes cv::Mat reference
+void ac::Tri(cv::Mat &frame) {
+ static double alpha = 1.0f;// static alpha set to 1
+ for(int z = 0; z < frame.cols-3; ++z) {// left to right
+ for(int i = 0; i < frame.rows-3; ++i) {// top to bottom
+ cv::Vec3b &color_value = frame.at(i, z);// current pixel
+ cv::Vec3b colors[2];// colors
+ // grab pixels
+ colors[0] = frame.at(i+1, z);
+ colors[1] = frame.at(i+2, z);
+ // set pixels
+ color_value[0] += static_cast(color_value[0]*alpha);
+ color_value[1] += static_cast(color_value[1]+colors[0][1]+colors[1][1]*alpha);
+ color_value[2] += static_cast(color_value[2]+colors[0][2]+colors[1][2]*alpha);
+ swapColors(frame, i, z);// swap
+ if(isNegative == true) {
+ invert(frame, i, z); // invert pixel
+ }
+ }
+ }
+ static double max = 4.0f, trans_var = 0.1f;
+ if (alpha < 0)
+ trans_var = translation_variable; // positive (up)
+ else if (alpha > max) {
+ trans_var = -translation_variable; // negative (down)
+ max += 3.0f;
+ if (max > 23)
+ max = 4.0f;
+ }
+ alpha += trans_var;// add to alpha trans var
+ resetAlpha(alpha);
+}
+// Distort
+// takes cv::Mat reference
+void ac::Distort(cv::Mat &frame) {
+ static double alpha = 1.0f; // static alpha set to 1
+ static int i = 0, z = 0;// loop variables
+ for(z = 0; z < frame.cols; ++z) { // left to right
+ for(i = 0; i < frame.rows; ++i) {// top to bottom
+ cv::Vec3b &color_value = frame.at(i, z);
+ // set pixel values
+ color_value[0] = static_cast((i*alpha)+color_value[0]);
+ color_value[2] = static_cast((z*alpha)+color_value[2]);
+ color_value[1] = static_cast((alpha*color_value[1]));
+ if(strobe_It == true) color_value[1] = static_cast(((i+z)*alpha)+color_value[1]);
+ swapColors(frame, i, z); //swap
+ if(isNegative == true) {
+ invert(frame, i, z);// invert
+ }
+ }
+ }
+ static double max = 4.0f, trans_var = 0.1f;
+ if (alpha < 0)
+ trans_var = 0.1f;
+ else if (alpha > max) {
+ trans_var = -0.1f;
+ max += 3.0f;
+ if (max > 23)
+ max = 4.0f;
+ }
+ alpha += trans_var;// add translation to alpha
+ resetAlpha(alpha);
+}
+// takes cv::Mat reference
+void ac::CDraw(cv::Mat &frame) {
+ static int i=0,z=0;// loop variables
+ static double rad = 80.0f;// radius
+ static double deg = 1.0f;// degrees
+ for(z = 0; z < frame.cols; ++z) { // left to right
+ for(i = 0; i < frame.rows; ++i) {// top to bottom
+ int cX = static_cast((rad * cos(deg)));
+ int cY = static_cast((rad * sin(deg)));
+ cv::Vec3b &color_value = frame.at(i, z); // grab pixel reference
+ // set values
+ color_value[0] = static_cast(color_value[0]*(cX * alpha));
+ color_value[1] = static_cast(color_value[1]*(cY * alpha));
+ color_value[2] = static_cast(color_value[2]*alpha);
+ deg += 0.1f;
+ swapColors(frame, i, z);// swap
+ if(isNegative) invert(frame, i, z);// if isNegative invert
+ }
+ }
+ alpha += 0.1f;// add to alpha
+ rad += 0.1f;// add to rad
+ if(rad > 90) rad = 0;// greater than 90 reset
+ if(alpha > 20) alpha = 0;// greater than 20 reset
+ resetAlpha(alpha);
+}
+// Light Strobe
+// first cycle through the image
+// add a variable to each individual pixel (the input sould be different each frame)
+// reason for this is adding to the captured image each frame causes a animation a distortion
+// each frame the largest value is calculated by adding the rgb values together for one element each iteration.
+// test this first
+void ac::Type(cv::Mat &frame) {
+ int i = 0, z = 0;// loop variables
+ static double add_r = 1.0; // add_r
+ static int off = 0;// off variable
+ for(z = 0; z < frame.rows; ++z) { // top to bottom
+ for(i = 0; i < frame.cols; ++i) {// left to right
+ cv::Vec3b ¤t = frame.at(z, i); // grab pixel reference
+ // set pixel values
+ current[0] += static_cast(add_r+current[0]);
+ current[1] += static_cast(add_r+current[1]);
+ current[2] += static_cast(add_r+current[2]);
+ // set value indexed by off which changes each frame
+ current[off] = current[0]+current[1]+current[2];
+ swapColors(frame, z, i);// swap the colors
+ if(isNegative) invert(frame, z, i); // invert pixel
+ }
+ }
+ ++off;// increase off
+ if(off > 2) off = 0;// greater than two set to zero
+ add_r += rand()%255;// random distortion plus equals random number
+ if(add_r > 255) add_r = 0;// greater than 255 set to zero
+}
+// New One
+// takes cv::Mat reference
+void ac::NewOne(cv::Mat &frame) {
+ for(int z = 0; z < frame.cols; ++z) {// left to right
+ for(int i = 1; i < frame.rows-1; ++i) {// top to bottom
+ cv::Vec3b &colv = frame.at(i, z);// get pixels
+ cv::Vec3b &cola = frame.at((frame.rows-1)-i, (frame.cols-1)-z);//frame.at((frame.cols-1)-z, (frame.rows-1)-i);
+ // set arrays
+ int red_values[] = { colv[0]+cola[2], colv[1]+cola[1], colv[2]+cola[0], 0 };
+ int green_values[] = { colv[2]+cola[0], colv[1]+cola[1], colv[0]+cola[2], 0 };
+ int blue_values[] = { colv[1]+cola[1], colv[0]+cola[2], colv[2]+cola[0], 0 };
+ unsigned char R = 0,G = 0,B = 0;
+ // loop through arrays
+ for(int iq = 0; iq <= 2; ++iq) {
+ R += red_values[iq];
+ R /= 3;
+ G += green_values[iq];
+ G /= 3;
+ B += blue_values[iq];
+ B /= 3;
+ }
+ // set pixel values
+ colv[0] += static_cast(alpha*R);
+ colv[1] += static_cast(alpha*G);
+ colv[2] += static_cast(alpha*B);
+ swapColors(frame, i, z);//swap colors
+ if(isNegative) invert(frame, i, z); // if isNegative invert pixel
+ }
+ }
+ static double max = 8.0f, trans_var = 0.1f;// max and translation
+ if (alpha < 0)
+ trans_var = 0.1f;
+ else if (alpha > max) {
+ trans_var = -0.1f;
+ max += 3.0f;
+ if (max > 23)
+ max = 4.0f;
+ }
+ alpha += trans_var;// add translation variable
+ resetAlpha(alpha);
+
+}
+// draw a fractal
+void ac::blendFractal(cv::Mat &frame) {
+ frac::FractalLogic();
+ frac::DrawFractal(frame, ac::isNegative);
+}
+
+// draw a fractal with background color blended
+void ac::blendFractalMood(cv::Mat &frame) {
+ // random
+ unsigned char color = 0;
+ color = rand()%255;
+ static bool shift = true;
+ static bool shift_value = true;
+ for(int z = 0; z < frame.cols; ++z) {// left to right
+ for(int i = 0; i < frame.rows; ++i) {// top to bottom
+ cv::Vec3b &color_value = frame.at(i, z);// grab pixel
+ // set pixel values
+ color_value[0] += (shift == shift_value) ? color : -color;
+ color_value[1] += (shift == shift_value) ? -color : color;
+ color_value[2] += (shift == shift_value) ? color : -color;
+ shift_value = !shift_value;// not shift value
+ }
+ }
+ shift = ! shift;// not shift value
+ frac::FractalLogic();
+ frac::DrawFractal(frame, ac::isNegative); // draw fractal
+}
+
+// blend with Image functions Resize X
+inline int ac::GetFX(cv::Mat &frame, int x, int nw) {
+ double xp = (double)x * (double)frame.rows / (double)nw;
+ return (int)xp;
+}
+// blend with Image function Resize Y
+inline int ac::GetFY(cv::Mat &frame, int y, int nh) {
+ double yp = (double)y * (double)frame.cols / (double)nh;
+ return (int)yp;
+}
+// blend with Image function
+// takes cv::Mat as reference
+void ac::blendWithImage(cv::Mat &frame) {
+ if(!blendW_frame.data) // if image not loaded return
+ return;
+ static double alpha = 1.0f; // set alpha to 1
+ static double beta = 1.0f; // set beta to 1
+ for(int z = 0; z < frame.cols; ++z) {// left to right
+ for(int i = 0; i < frame.rows; ++i) {// top to bottom
+ // get resized pixel values
+ int q = GetFX(blendW_frame, i, frame.rows);
+ int j = GetFY(blendW_frame, z, frame.cols);
+ // grab pixels
+ cv::Vec3b &frame_one = frame.at(i, z);
+ cv::Vec3b &frame_two = blendW_frame.at(q, j);
+ // set pixel values
+ for(int p = 0; p < 3; ++p)
+ frame_one[p] += static_cast((frame_one[p]*alpha)+(frame_two[p]*beta));
+ swapColors(frame, i, z); // swap colors
+ if(isNegative == true) {
+ invert(frame, i, z);// invert pixel
+ }
+ }
+ }
+ // move alpha and beta values up and down
+ static double max = 4.0f, trans_var = 0.1f;
+ if (alpha < 0)
+ trans_var = translation_variable;
+ else if (alpha > max) {
+ trans_var = -translation_variable;
+ max += 3.0f;
+ if (max > 23)
+ max = 4.0f;
+ }
+ alpha += trans_var;
+ beta += -trans_var;
+}
+// triBlend with Image unused
+void ac::triBlendWithImage(cv::Mat &frame) {
+ if(images_Enabled == false) return;
+ static double alpha = 1.0f, beta = 1.0f;
+ static int i = 0, z = 0, j = 0;
+ for(z = 0; z < frame.cols; ++z) {
+ for(i = 0; i < frame.rows; ++i) {
+ cv::Vec3b colors[3];
+ cv::Vec3b &color_value = frame.at(i, z);
+ int cx[3] = { ac::GetFX(image_files[0], i, frame.rows), ac::GetFX(image_files[1], i, frame.rows), ac::GetFX(image_files[2], i, frame.rows) };
+ int cy[3] = { ac::GetFY(image_files[0], z, frame.cols), ac::GetFY(image_files[1], z, frame.cols), ac::GetFY(image_files[2], z, frame.cols) };
+ for(j = 0; j < 3; ++j) {
+ colors[j] = image_files[j].at(cx[j], cy[j]);
+ }
+ color_value[0] = static_cast(((color_value[0]+colors[0][0])/2)*alpha);
+ color_value[1] += static_cast(((color_value[1]+colors[0][1])/2)*alpha);
+ color_value[2] = static_cast(((color_value[2]+colors[0][2]+colors[1][2]+colors[2][2])/3)*beta);
+ swapColors(frame, i, z);
+ if(isNegative == true) {
+ invert(frame, i, z);
+ }
+ }
+ }
+ static double max = 4.0f, trans_var = 0.1f;
+ if (alpha < 0)
+ trans_var = translation_variable;
+ else if (alpha > max) {
+ trans_var = -translation_variable;
+ max += 3.0f;
+ if (max > 23)
+ max = 4.0f;
+ }
+ alpha += trans_var;
+ beta += -trans_var;
+}
+
+// Image Strobe - unused
+void ac::imageStrobe(cv::Mat &frame) {
+ if(images_Enabled == false) return;
+ static double alpha = 1.0f;
+ static int i = 0, z = 0, j = 0, image_offset = 0;
+ for(z = 0; z < frame.cols; ++z) {
+ for(i = 0; i < frame.rows; ++i) {
+ cv::Vec3b colors[3];
+ cv::Vec3b &color_value = frame.at(i, z);
+ int cx[3] = { ac::GetFX(image_files[0], i, frame.rows), ac::GetFX(image_files[1], i, frame.rows), ac::GetFX(image_files[2], i, frame.rows) };
+ int cy[3] = { ac::GetFY(image_files[0], z, frame.cols), ac::GetFY(image_files[1], z, frame.cols), ac::GetFY(image_files[2], z, frame.cols) };
+ for(j = 0; j < 3; ++j)
+ colors[j] = image_files[j].at(cx[j], cy[j]);
+ for(j = 0; j < 3; ++j)
+ color_value[j] += static_cast((colors[image_offset][j]*alpha));
+ swapColors(frame, i, z);
+ if(isNegative == true) {
+ invert(frame, i, z);
+ }
+ }
+ }
+ ++image_offset;
+ if(image_offset >= 4) image_offset = 0;
+ static double max = 4.0f, trans_var = 0.1f;
+ if (alpha < 0)
+ trans_var = translation_variable;
+ else if (alpha > max) {
+ trans_var = -translation_variable;
+ max += 3.0f;
+ if (max > 23)
+ max = 4.0f;
+ }
+ alpha += trans_var;
+ resetAlpha(alpha);
+}
+// Image distraction - unused
+void ac::imageDistraction(cv::Mat &frame) {
+ if(images_Enabled == false) return;
+ static double alpha = 1.0f;
+ static int i = 0, z = 0, im_off = 2;
+ for(z = 0; z < frame.cols; ++z) {
+ for(i = 0; i < frame.rows; ++i) {
+ cv::Vec3b &color_value = frame.at(i, z);
+ int cX = GetFX(image_files[im_off], i, frame.rows), cY = GetFY(image_files[im_off], z, frame.cols);
+ cv::Vec3b manip_color = image_files[im_off].at(cX, cY);
+ color_value[0] = static_cast((z*alpha)+color_value[0]);
+ color_value[1] = static_cast(manip_color[1]*alpha);
+ color_value[2] = static_cast((i*alpha)+color_value[2]);
+ swapColors(frame, i, z);
+ if(isNegative) invert(frame, i, z);
+ }
+ }
+ ++im_off;
+ if(im_off >= 4) im_off = 0;
+ static double max = 4.0f, trans_var = 0.1f;
+ if (alpha < 0)
+ trans_var = 0.1f;
+ else if (alpha > max) {
+ trans_var = -0.1f;
+ max += 3.0f;
+ if (max > 23)
+ max = 4.0f;
+ }
+ alpha += trans_var;
+ resetAlpha(alpha);
+}
+
+// Cos Sin Mulitply draw gradients
+// takes cv::Mat reference
+void ac::cossinMultiply(cv::Mat &frame) {
+ static double alpha = 1.0f;// set static alpha to 1.0
+ static int i = 0, z = 0;// loop variables
+ for(z = 0; z < frame.cols; ++z) {// left to right
+ for(i = 0; i < frame.rows; ++i) {// top to bottom
+ cv::Vec3b &buffer = frame.at(i, z); // grab pixel
+ // set pixel values
+ buffer[0] += static_cast(1+static_cast((sin(alpha))*z));
+ buffer[1] += static_cast(1+static_cast((cos(alpha))*i));
+ buffer[2] += static_cast