diff --git a/.gitignore b/.gitignore
index 8a29fa5..8c57491 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,63 +1,6 @@
-# Xcode
-#
-# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
-
-## Build generated
-build/
-DerivedData/
-
-## Various settings
-*.pbxuser
-!default.pbxuser
-*.mode1v3
-!default.mode1v3
-*.mode2v3
-!default.mode2v3
-*.perspectivev3
-!default.perspectivev3
-xcuserdata/
-
-## Other
-*.moved-aside
-*.xcuserstate
-
-## Obj-C/Swift specific
-*.hmap
-*.ipa
-
-## Playgrounds
-timeline.xctimeline
-playground.xcworkspace
+.DS_Store
-# Swift Package Manager
-#
-# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
-# Packages/
-.build/
-
-# CocoaPods
-#
-# We recommend against adding the Pods directory to your .gitignore. However
-# you should judge for yourself, the pros and cons are mentioned at:
-# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
-#
-# Pods/
-
-# Carthage
-#
-# Add this line if you want to avoid checking in source code from Carthage dependencies.
-# Carthage/Checkouts
-
-Carthage/Build
-
-# fastlane
-#
-# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
-# screenshots whenever they are needed.
-# For more information about the recommended setup visit:
-# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
-
-fastlane/report.xml
-fastlane/Preview.html
-fastlane/screenshots
-fastlane/test_output
+# Xcode
+# this ignores dummy workspace files in xcodeproj dir
+Filterpedia.xcodeproj/*
+!Filterpedia.xcodeproj/project.pbxproj
diff --git a/Filterpedia.xcodeproj/project.pbxproj b/Filterpedia.xcodeproj/project.pbxproj
old mode 100644
new mode 100755
index 34eeb5c..31bdc8e
--- a/Filterpedia.xcodeproj/project.pbxproj
+++ b/Filterpedia.xcodeproj/project.pbxproj
@@ -462,11 +462,14 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0720;
- LastUpgradeCheck = 0720;
+ LastUpgradeCheck = 1010;
ORGANIZATIONNAME = "Simon Gladman";
TargetAttributes = {
3E9A72061C325E5600CAD516 = {
CreatedOnToolsVersion = 7.2;
+ DevelopmentTeam = 6CFA54MQCP;
+ LastSwiftMigration = 1010;
+ ProvisioningStyle = Manual;
};
};
};
@@ -646,13 +649,23 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -691,13 +704,23 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -716,6 +739,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
TARGETED_DEVICE_FAMILY = 2;
VALIDATE_PRODUCT = YES;
};
@@ -725,11 +749,15 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = 6CFA54MQCP;
INFOPLIST_FILE = Filterpedia/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = uk.co.flexmonkey.Filterpedia;
PRODUCT_NAME = "$(TARGET_NAME)";
- TARGETED_DEVICE_FAMILY = 2;
+ PROVISIONING_PROFILE_SPECIFIER = "(dan jan 16) Dev Any App";
+ SWIFT_VERSION = 4.2;
+ TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
@@ -737,11 +765,15 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Filterpedia/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = uk.co.flexmonkey.Filterpedia;
PRODUCT_NAME = "$(TARGET_NAME)";
- TARGETED_DEVICE_FAMILY = 2;
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 4.2;
+ TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
diff --git a/Filterpedia.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Filterpedia.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 3ee8632..0000000
--- a/Filterpedia.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/Filterpedia.xcodeproj/xcuserdata/simongladman.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Filterpedia.xcodeproj/xcuserdata/simongladman.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
deleted file mode 100644
index fe2b454..0000000
--- a/Filterpedia.xcodeproj/xcuserdata/simongladman.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/Filterpedia.xcodeproj/xcuserdata/simongladman.xcuserdatad/xcschemes/Filterpedia.xcscheme b/Filterpedia.xcodeproj/xcuserdata/simongladman.xcuserdatad/xcschemes/Filterpedia.xcscheme
deleted file mode 100644
index 57a9cee..0000000
--- a/Filterpedia.xcodeproj/xcuserdata/simongladman.xcuserdatad/xcschemes/Filterpedia.xcscheme
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Filterpedia.xcodeproj/xcuserdata/simongladman.xcuserdatad/xcschemes/xcschememanagement.plist b/Filterpedia.xcodeproj/xcuserdata/simongladman.xcuserdatad/xcschemes/xcschememanagement.plist
deleted file mode 100644
index 3e6044e..0000000
--- a/Filterpedia.xcodeproj/xcuserdata/simongladman.xcuserdatad/xcschemes/xcschememanagement.plist
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- SchemeUserState
-
- Filterpedia.xcscheme
-
- orderHint
- 0
-
-
- SuppressBuildableAutocreation
-
- 3E9A72061C325E5600CAD516
-
- primary
-
-
-
-
-
diff --git a/Filterpedia/AppDelegate.swift b/Filterpedia/AppDelegate.swift
old mode 100644
new mode 100755
index 7a4e04f..36dd271
--- a/Filterpedia/AppDelegate.swift
+++ b/Filterpedia/AppDelegate.swift
@@ -14,30 +14,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
- func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
- func applicationWillResignActive(application: UIApplication) {
+ func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- func applicationDidEnterBackground(application: UIApplication) {
+ func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- func applicationWillEnterForeground(application: UIApplication) {
+ func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- func applicationDidBecomeActive(application: UIApplication) {
+ func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
- func applicationWillTerminate(application: UIApplication) {
+ func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
diff --git a/Filterpedia/Assets.xcassets/AppIcon.appiconset/Contents.json b/Filterpedia/Assets.xcassets/AppIcon.appiconset/Contents.json
old mode 100644
new mode 100755
diff --git a/Filterpedia/Base.lproj/LaunchScreen.storyboard b/Filterpedia/Base.lproj/LaunchScreen.storyboard
old mode 100644
new mode 100755
diff --git a/Filterpedia/Base.lproj/Main.storyboard b/Filterpedia/Base.lproj/Main.storyboard
old mode 100644
new mode 100755
diff --git a/Filterpedia/Info.plist b/Filterpedia/Info.plist
old mode 100644
new mode 100755
index 7c49c19..d08c72e
--- a/Filterpedia/Info.plist
+++ b/Filterpedia/Info.plist
@@ -32,10 +32,12 @@
UIRequiresFullScreen
- UISupportedInterfaceOrientations~ipad
+ UISupportedInterfaceOrientations
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
+ UISupportedInterfaceOrientations~ipad
+
diff --git a/Filterpedia/ViewController.swift b/Filterpedia/ViewController.swift
old mode 100644
new mode 100755
index 5180e9c..d4e86f3
--- a/Filterpedia/ViewController.swift
+++ b/Filterpedia/ViewController.swift
@@ -39,7 +39,7 @@ class ViewController: UIViewController
extension ViewController: FilterNavigatorDelegate
{
- func filterNavigator(filterNavigator: FilterNavigator, didSelectFilterName: String)
+ func filterNavigator(_ filterNavigator: FilterNavigator, didSelectFilterName: String)
{
filterDetail.filterName = didSelectFilterName
}
diff --git a/Filterpedia/assets/Assets.swift b/Filterpedia/assets/Assets.swift
index 29eb00d..9265dad 100644
--- a/Filterpedia/assets/Assets.swift
+++ b/Filterpedia/assets/Assets.swift
@@ -13,7 +13,7 @@ typealias NamedImage = (name: String, ciImage: CIImage)
let gradientImage = CIFilter(
name: "CIRadialGradient",
- withInputParameters: [
+ parameters: [
kCIInputCenterKey:
CIVector(x: 320, y: 320),
"inputRadius0": 200,
@@ -24,7 +24,7 @@ let gradientImage = CIFilter(
CIColor(red: 1, green: 1, blue: 1)
])?
.outputImage?
- .imageByCroppingToRect(CGRect(x: 0, y: 0, width: 640, height: 640))
+ .cropped(to: CGRect(x: 0, y: 0, width: 640, height: 640))
let assets = [
NamedImage(name: "Mona Lisa", ciImage: CIImage(image: UIImage(named: "monalisa.jpg")!)!),
@@ -37,4 +37,4 @@ let assets = [
NamedImage(name: "Gradient", ciImage: gradientImage!)
]
-let assetLabels = assets.map({ $0.name })
\ No newline at end of file
+let assetLabels = assets.map({ $0.name })
diff --git a/Filterpedia/components/CompositeOverBlackFilter.swift b/Filterpedia/components/CompositeOverBlackFilter.swift
old mode 100644
new mode 100755
index 95083fa..4daae8c
--- a/Filterpedia/components/CompositeOverBlackFilter.swift
+++ b/Filterpedia/components/CompositeOverBlackFilter.swift
@@ -14,15 +14,15 @@ class CompositeOverBlackFilter: CIFilter
let black: CIFilter
let composite: CIFilter
- var inputImage : CIImage?
+ @objc var inputImage : CIImage?
override init()
{
black = CIFilter(name: "CIConstantColorGenerator",
- withInputParameters: [kCIInputColorKey: CIColor(color: UIColor.blackColor())])!
+ parameters: [kCIInputColorKey: CIColor(color: UIColor.black)])!
composite = CIFilter(name: "CISourceAtopCompositing",
- withInputParameters: [kCIInputBackgroundImageKey: black.outputImage!])!
+ parameters: [kCIInputBackgroundImageKey: black.outputImage!])!
super.init()
}
diff --git a/Filterpedia/components/FilterDetail.swift b/Filterpedia/components/FilterDetail.swift
old mode 100644
new mode 100755
index 087d5ae..27e75e9
--- a/Filterpedia/components/FilterDetail.swift
+++ b/Filterpedia/components/FilterDetail.swift
@@ -23,7 +23,7 @@ import UIKit
class FilterDetail: UIView
{
let rect640x640 = CGRect(x: 0, y: 0, width: 640, height: 640)
- let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge)
+ let activityIndicator = UIActivityIndicatorView(style: .whiteLarge)
let compositeOverBlackFilter = CompositeOverBlackFilter()
@@ -31,7 +31,7 @@ class FilterDetail: UIView
{
let layer = CAShapeLayer()
- layer.strokeColor = UIColor.lightGrayColor().CGColor
+ layer.strokeColor = UIColor.lightGray.cgColor
layer.fillColor = nil
layer.lineWidth = 0.5
@@ -40,10 +40,10 @@ class FilterDetail: UIView
let tableView: UITableView =
{
- let tableView = UITableView(frame: CGRectZero,
- style: UITableViewStyle.Plain)
+ let tableView = UITableView(frame: CGRect.zero,
+ style: UITableView.Style.plain)
- tableView.registerClass(FilterInputItemRenderer.self,
+ tableView.register(FilterInputItemRenderer.self,
forCellReuseIdentifier: "FilterInputItemRenderer")
return tableView
@@ -55,11 +55,11 @@ class FilterDetail: UIView
{
let toggle = UISwitch()
- toggle.on = !self.histogramDisplayHidden
+ toggle.isOn = !self.histogramDisplayHidden
toggle.addTarget(
self,
action: #selector(FilterDetail.toggleHistogramView),
- forControlEvents: .ValueChanged)
+ for: .valueChanged)
return toggle
}()
@@ -72,13 +72,13 @@ class FilterDetail: UIView
{
if !histogramDisplayHidden
{
- self.histogramDisplay.imageRef = imageView.image?.CGImage
+ self.histogramDisplay.imageRef = imageView.image?.cgImage
}
- UIView.animateWithDuration(0.25)
- {
+ UIView.animate(withDuration: 0.25, animations: {
self.histogramDisplay.alpha = self.histogramDisplayHidden ? 0 : 1
- }
+ })
+
}
}
@@ -86,16 +86,16 @@ class FilterDetail: UIView
{
let imageView = UIImageView()
- imageView.backgroundColor = UIColor.blackColor()
+ imageView.backgroundColor = UIColor.black
- imageView.layer.borderColor = UIColor.grayColor().CGColor
+ imageView.layer.borderColor = UIColor.gray.cgColor
imageView.layer.borderWidth = 1
return imageView
}()
#if !arch(i386) && !arch(x86_64)
- let ciMetalContext = CIContext(MTLDevice: MTLCreateSystemDefaultDevice()!)
+ let ciMetalContext = CIContext(mtlDevice: MTLCreateSystemDefaultDevice()!)
#else
let ciMetalContext = CIContext()
#endif
@@ -130,10 +130,10 @@ class FilterDetail: UIView
}
}
- private var currentFilter: CIFilter?
+ fileprivate var currentFilter: CIFilter?
/// User defined filter parameter values
- private var filterParameterValues: [String: AnyObject] = [kCIInputImageKey: assets.first!.ciImage]
+ fileprivate var filterParameterValues: [String: AnyObject] = [kCIInputImageKey: assets.first!.ciImage]
override init(frame: CGRect)
{
@@ -168,18 +168,18 @@ class FilterDetail: UIView
fatalError("init(coder:) has not been implemented")
}
- func toggleHistogramView()
+ @objc func toggleHistogramView()
{
- histogramDisplayHidden = !histogramToggleSwitch.on
+ histogramDisplayHidden = !histogramToggleSwitch.isOn
}
- func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
+ func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
func updateFromFilterName()
{
- guard let filterName = filterName, filter = CIFilter(name: filterName) else
+ guard let filterName = filterName, let filter = CIFilter(name: filterName) else
{
return
}
@@ -219,24 +219,21 @@ class FilterDetail: UIView
if let attribute = attributes[inputKey] as? [String : AnyObject]
{
// default image
- if let className = attribute[kCIAttributeClass] as? String
- where className == "CIImage" && filterParameterValues[inputKey] == nil
+ if let className = attribute[kCIAttributeClass] as? String, className == "CIImage" && filterParameterValues[inputKey] == nil
{
filterParameterValues[inputKey] = assets.first!.ciImage
}
// ensure previous values don't exceed kCIAttributeSliderMax for this filter
if let maxValue = attribute[kCIAttributeSliderMax] as? Float,
- filterParameterValue = filterParameterValues[inputKey] as? Float
- where filterParameterValue > maxValue
+ let filterParameterValue = filterParameterValues[inputKey] as? Float, filterParameterValue > maxValue
{
- filterParameterValues[inputKey] = maxValue
+ filterParameterValues[inputKey] = maxValue as AnyObject
}
// ensure vector is correct length
if let defaultVector = attribute[kCIAttributeDefault] as? CIVector,
- filterParameterValue = filterParameterValues[inputKey] as? CIVector
- where defaultVector.count != filterParameterValue.count
+ let filterParameterValue = filterParameterValues[inputKey] as? CIVector, defaultVector.count != filterParameterValue.count
{
filterParameterValues[inputKey] = defaultVector
}
@@ -263,11 +260,9 @@ class FilterDetail: UIView
.filter({ $0 is FilterAttributesDisplayable})
.forEach({ ($0 as? FilterAttributesDisplayable)?.setFilter(currentFilter) })
- let queue = currentFilter is VImageFilter ?
- dispatch_get_main_queue() :
- dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
+ let queue = currentFilter is VImageFilter ? DispatchQueue.main : DispatchQueue.global()
- dispatch_async(queue)
+ queue.async
{
let startTime = CFAbsoluteTimeGetCurrent()
@@ -277,7 +272,7 @@ class FilterDetail: UIView
}
let outputImage = currentFilter.outputImage!
- let finalImage: CGImageRef
+ let finalImage: CGImage
let context = (currentFilter is MetalRenderable) ? self.ciMetalContext : self.ciOpenGLESContext
@@ -287,13 +282,13 @@ class FilterDetail: UIView
// (e.g. a reduction filter) stretch to 640x640
let stretch = CIFilter(name: "CIStretchCrop",
- withInputParameters: ["inputSize": CIVector(x: 640, y: 640),
+ parameters: ["inputSize": CIVector(x: 640, y: 640),
"inputCropAmount": 0,
"inputCenterStretchAmount": 1,
kCIInputImageKey: outputImage])!
finalImage = context.createCGImage(stretch.outputImage!,
- fromRect: self.rect640x640)
+ from: self.rect640x640)!
}
else if outputImage.extent.width < 640 || outputImage.extent.height < 640
{
@@ -304,25 +299,25 @@ class FilterDetail: UIView
forKey: kCIInputImageKey)
finalImage = context.createCGImage(self.compositeOverBlackFilter.outputImage!,
- fromRect: self.rect640x640)
+ from: self.rect640x640)!
}
else
{
finalImage = context.createCGImage(outputImage,
- fromRect: self.rect640x640)
+ from: self.rect640x640)!
}
let endTime = (CFAbsoluteTimeGetCurrent() - startTime)
print(self.filterName!, "execution time", endTime)
- dispatch_async(dispatch_get_main_queue())
+ DispatchQueue.main.async
{
if !self.histogramDisplayHidden
{
self.histogramDisplay.imageRef = finalImage
}
- self.imageView.image = UIImage(CGImage: finalImage)
+ self.imageView.image = UIImage(cgImage: finalImage)
self.busy = false
if self.pending
@@ -362,20 +357,20 @@ class FilterDetail: UIView
height: thirdHeight).insetBy(dx: 5, dy: 5)
histogramToggleSwitch.frame = CGRect(
- x: frame.width - histogramToggleSwitch.intrinsicContentSize().width,
+ x: frame.width - histogramToggleSwitch.intrinsicContentSize.width,
y: 0,
- width: intrinsicContentSize().width,
- height: intrinsicContentSize().height)
+ width: intrinsicContentSize.width,
+ height: intrinsicContentSize.height)
- tableView.separatorStyle = UITableViewCellSeparatorStyle.None
+ tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
activityIndicator.frame = imageView.bounds
let path = UIBezierPath()
- path.moveToPoint(CGPoint(x: 0, y: 0))
- path.addLineToPoint(CGPoint(x: 0, y: frame.height))
+ path.move(to: CGPoint(x: 0, y: 0))
+ path.addLine(to: CGPoint(x: 0, y: frame.height))
- shapeLayer.path = path.CGPath
+ shapeLayer.path = path.cgPath
}
}
@@ -383,7 +378,7 @@ class FilterDetail: UIView
extension FilterDetail: UITableViewDelegate
{
- func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
+ func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
return 85
}
@@ -393,18 +388,18 @@ extension FilterDetail: UITableViewDelegate
extension FilterDetail: UITableViewDataSource
{
- func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return currentFilter?.inputKeys.count ?? 0
}
- func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
- let cell = tableView.dequeueReusableCellWithIdentifier("FilterInputItemRenderer",
- forIndexPath: indexPath) as! FilterInputItemRenderer
+ let cell = tableView.dequeueReusableCell(withIdentifier: "FilterInputItemRenderer",
+ for: indexPath) as! FilterInputItemRenderer
if let inputKey = currentFilter?.inputKeys[indexPath.row],
- attribute = currentFilter?.attributes[inputKey] as? [String : AnyObject]
+ let attribute = currentFilter?.attributes[inputKey] as? [String : AnyObject]
{
cell.detail = (inputKey: inputKey,
attribute: attribute,
@@ -421,9 +416,9 @@ extension FilterDetail: UITableViewDataSource
extension FilterDetail: FilterInputItemRendererDelegate
{
- func filterInputItemRenderer(filterInputItemRenderer: FilterInputItemRenderer, didChangeValue: AnyObject?, forKey: String?)
+ func filterInputItemRenderer(_ filterInputItemRenderer: FilterInputItemRenderer, didChangeValue: AnyObject?, forKey: String?)
{
- if let key = forKey, value = didChangeValue
+ if let key = forKey, let value = didChangeValue
{
filterParameterValues[key] = value
@@ -431,7 +426,7 @@ extension FilterDetail: FilterInputItemRendererDelegate
}
}
- func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool
+ func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool
{
return false
}
diff --git a/Filterpedia/components/FilterInputItemRenderer.swift b/Filterpedia/components/FilterInputItemRenderer.swift
old mode 100644
new mode 100755
index 2dca04a..6f61420
--- a/Filterpedia/components/FilterInputItemRenderer.swift
+++ b/Filterpedia/components/FilterInputItemRenderer.swift
@@ -34,7 +34,7 @@ class FilterInputItemRenderer: UITableViewCell
{
let layer = CAShapeLayer()
- layer.strokeColor = UIColor.lightGrayColor().CGColor
+ layer.strokeColor = UIColor.lightGray.cgColor
layer.fillColor = nil
layer.lineWidth = 0.5
@@ -46,7 +46,7 @@ class FilterInputItemRenderer: UITableViewCell
let label = UILabel()
label.numberOfLines = 2
- label.font = UIFont.italicSystemFontOfSize(12)
+ label.font = UIFont.italicSystemFont(ofSize: 12)
return label
}()
@@ -55,13 +55,13 @@ class FilterInputItemRenderer: UITableViewCell
{
let stackView = UIStackView()
- stackView.axis = UILayoutConstraintAxis.Vertical
+ stackView.axis = NSLayoutConstraint.Axis.vertical
return stackView
}()
weak var delegate: FilterInputItemRendererDelegate?
- private(set) var inputKey: String = ""
+ fileprivate(set) var inputKey: String = ""
var detail: (inputKey: String, attribute: [String : AnyObject], filterParameterValues: [String: AnyObject]) = ("", [String: AnyObject](), [String: AnyObject]())
{
@@ -73,10 +73,10 @@ class FilterInputItemRenderer: UITableViewCell
}
}
- private var title: String = ""
- private var filterParameterValues = [String: AnyObject]()
+ fileprivate var title: String = ""
+ fileprivate var filterParameterValues = [String: AnyObject]()
- private(set) var attribute = [String : AnyObject]()
+ fileprivate(set) var attribute = [String : AnyObject]()
{
didSet
{
@@ -93,7 +93,7 @@ class FilterInputItemRenderer: UITableViewCell
}
}
- private(set) var value: AnyObject?
+ fileprivate(set) var value: AnyObject?
{
didSet
{
@@ -106,7 +106,7 @@ class FilterInputItemRenderer: UITableViewCell
}
}
- override init(style: UITableViewCellStyle, reuseIdentifier: String?)
+ override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?)
{
super.init(style: style, reuseIdentifier: reuseIdentifier)
@@ -115,8 +115,8 @@ class FilterInputItemRenderer: UITableViewCell
contentView.addSubview(stackView)
textEditButton.layer.cornerRadius = 5
- textEditButton.layer.backgroundColor = UIColor(white: 0.8, alpha: 1.0).CGColor
- textEditButton.setTitleColor(UIColor.blueColor(), forState: .Normal)
+ textEditButton.layer.backgroundColor = UIColor(white: 0.8, alpha: 1.0).cgColor
+ textEditButton.setTitleColor(UIColor.blue, for: UIControl.State())
stackView.addArrangedSubview(titleLabel)
stackView.addArrangedSubview(descriptionLabel)
@@ -127,19 +127,19 @@ class FilterInputItemRenderer: UITableViewCell
slider.addTarget(self,
action: #selector(FilterInputItemRenderer.sliderChangeHandler),
- forControlEvents: UIControlEvents.ValueChanged)
+ for: UIControl.Event.valueChanged)
vectorSlider.addTarget(self,
action: #selector(FilterInputItemRenderer.vectorSliderChangeHandler),
- forControlEvents: UIControlEvents.ValueChanged)
+ for: UIControl.Event.valueChanged)
imagesSegmentedControl.addTarget(self,
action: #selector(FilterInputItemRenderer.imagesSegmentedControlChangeHandler),
- forControlEvents: UIControlEvents.ValueChanged)
+ for: UIControl.Event.valueChanged)
textEditButton.addTarget(self,
action: #selector(FilterInputItemRenderer.textEditClicked),
- forControlEvents: .TouchDown)
+ for: .touchDown)
}
required init?(coder aDecoder: NSCoder)
@@ -149,25 +149,25 @@ class FilterInputItemRenderer: UITableViewCell
// MARK: Change handlers
- func sliderChangeHandler()
+ @objc func sliderChangeHandler()
{
- value = slider.value
+ value = slider.value as AnyObject
}
- func vectorSliderChangeHandler()
+ @objc func vectorSliderChangeHandler()
{
guard let attributeType = attribute[kCIAttributeClass] as? String,
- vector = vectorSlider.vector else
+ let vector = vectorSlider.vector else
{
return
}
if attributeType == "CIColor"
{
- value = CIColor(red: vector.X,
- green: vector.Y,
- blue: vector.Z,
- alpha: vector.W)
+ value = CIColor(red: vector.x,
+ green: vector.y,
+ blue: vector.z,
+ alpha: vector.w)
}
else
{
@@ -175,35 +175,35 @@ class FilterInputItemRenderer: UITableViewCell
}
}
- func imagesSegmentedControlChangeHandler()
+ @objc func imagesSegmentedControlChangeHandler()
{
value = assets[imagesSegmentedControl.selectedSegmentIndex].ciImage
}
- func textEditClicked()
+ @objc func textEditClicked()
{
- guard let rootController = UIApplication.sharedApplication().keyWindow!.rootViewController else
+ guard let rootController = UIApplication.shared.keyWindow!.rootViewController else
{
return
}
- let editTextController = UIAlertController(title: "Filterpedia", message: nil, preferredStyle: .Alert)
+ let editTextController = UIAlertController(title: "Filterpedia", message: nil, preferredStyle: .alert)
- let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default)
+ let okAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default)
{
(_: UIAlertAction) in
if let updatedText = editTextController.textFields?.first?.text
{
- self.value = updatedText
+ self.value = updatedText as AnyObject
- self.textEditButton.setTitle(updatedText, forState: .Normal)
+ self.textEditButton.setTitle(updatedText, for: UIControl.State())
}
}
- let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
+ let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel, handler: nil)
- editTextController.addTextFieldWithConfigurationHandler
+ editTextController.addTextField
{
(textField: UITextField) in
@@ -213,7 +213,7 @@ class FilterInputItemRenderer: UITableViewCell
editTextController.addAction(okAction)
editTextController.addAction(cancelAction)
- rootController.presentViewController(editTextController, animated: false, completion: nil)
+ rootController.present(editTextController, animated: false, completion: nil)
}
// MARK: Update user interface for attributes
@@ -228,10 +228,10 @@ class FilterInputItemRenderer: UITableViewCell
switch attributeType
{
case "NSNumber":
- slider.hidden = false
- imagesSegmentedControl.hidden = true
- vectorSlider.hidden = true
- textEditButton.hidden = true
+ slider.isHidden = false
+ imagesSegmentedControl.isHidden = true
+ vectorSlider.isHidden = true
+ textEditButton.isHidden = true
slider.min = attribute[kCIAttributeSliderMin] as? Float ?? 0
slider.max = attribute[kCIAttributeSliderMax] as? Float ?? 1
@@ -242,20 +242,20 @@ class FilterInputItemRenderer: UITableViewCell
sliderChangeHandler()
case "CIImage":
- slider.hidden = true
- imagesSegmentedControl.hidden = false
- vectorSlider.hidden = true
- textEditButton.hidden = true
+ slider.isHidden = true
+ imagesSegmentedControl.isHidden = false
+ vectorSlider.isHidden = true
+ textEditButton.isHidden = true
- imagesSegmentedControl.selectedSegmentIndex = assets.indexOf({ $0.ciImage == filterParameterValues[inputKey] as? CIImage}) ?? 0
+ imagesSegmentedControl.selectedSegmentIndex = assets.index(where: { $0.ciImage == filterParameterValues[inputKey] as? CIImage}) ?? 0
imagesSegmentedControlChangeHandler()
case "CIVector":
- slider.hidden = true
- imagesSegmentedControl.hidden = true
- vectorSlider.hidden = false
- textEditButton.hidden = true
+ slider.isHidden = true
+ imagesSegmentedControl.isHidden = true
+ vectorSlider.isHidden = false
+ textEditButton.isHidden = true
let max: CGFloat? = (attribute[kCIAttributeType] as? String == kCIAttributeTypePosition) ? 640 : nil
let vector = filterParameterValues[inputKey] as? CIVector ?? attribute[kCIAttributeDefault] as? CIVector
@@ -265,10 +265,10 @@ class FilterInputItemRenderer: UITableViewCell
vectorSliderChangeHandler()
case "CIColor":
- slider.hidden = true
- imagesSegmentedControl.hidden = true
- vectorSlider.hidden = false
- textEditButton.hidden = true
+ slider.isHidden = true
+ imagesSegmentedControl.isHidden = true
+ vectorSlider.isHidden = false
+ textEditButton.isHidden = true
if let color = filterParameterValues[inputKey] as? CIColor ?? attribute[kCIAttributeDefault] as? CIColor
{
@@ -279,21 +279,21 @@ class FilterInputItemRenderer: UITableViewCell
vectorSliderChangeHandler()
case "NSString":
- slider.hidden = true
- imagesSegmentedControl.hidden = true
- vectorSlider.hidden = true
- textEditButton.hidden = false
+ slider.isHidden = true
+ imagesSegmentedControl.isHidden = true
+ vectorSlider.isHidden = true
+ textEditButton.isHidden = false
let text = filterParameterValues[inputKey] as? NSString ?? attribute[kCIAttributeDefault] as? NSString ?? ""
value = text
- textEditButton.setTitle(String(text), forState: .Normal)
+ textEditButton.setTitle(String(text), for: UIControl.State())
default:
- slider.hidden = true
- imagesSegmentedControl.hidden = true
- vectorSlider.hidden = true
- textEditButton.hidden = true
+ slider.isHidden = true
+ imagesSegmentedControl.isHidden = true
+ vectorSlider.isHidden = true
+ textEditButton.isHidden = true
}
}
@@ -303,10 +303,10 @@ class FilterInputItemRenderer: UITableViewCell
stackView.frame = contentView.bounds.insetBy(dx: 5, dy: 5)
let path = UIBezierPath()
- path.moveToPoint(CGPoint(x: 5, y: contentView.bounds.height))
- path.addLineToPoint(CGPoint(x: contentView.bounds.width, y: contentView.bounds.height))
+ path.move(to: CGPoint(x: 5, y: contentView.bounds.height))
+ path.addLine(to: CGPoint(x: contentView.bounds.width, y: contentView.bounds.height))
- shapeLayer.path = path.CGPath
+ shapeLayer.path = path.cgPath
}
}
@@ -315,5 +315,5 @@ class FilterInputItemRenderer: UITableViewCell
protocol FilterInputItemRendererDelegate: class
{
- func filterInputItemRenderer(filterInputItemRenderer: FilterInputItemRenderer, didChangeValue: AnyObject?, forKey: String?)
+ func filterInputItemRenderer(_ filterInputItemRenderer: FilterInputItemRenderer, didChangeValue: AnyObject?, forKey: String?)
}
diff --git a/Filterpedia/components/FilterNavigator.swift b/Filterpedia/components/FilterNavigator.swift
old mode 100644
new mode 100755
index cd67560..44cbe95
--- a/Filterpedia/components/FilterNavigator.swift
+++ b/Filterpedia/components/FilterNavigator.swift
@@ -40,7 +40,7 @@ class FilterNavigator: UIView
kCICategoryStylize,
kCICategoryTileEffect,
kCICategoryTransition,
- ].sort{ CIFilter.localizedNameForCategory($0) < CIFilter.localizedNameForCategory($1)}
+ ].sorted{ CIFilter.localizedName(forCategory: $0) < CIFilter.localizedName(forCategory: $1)}
/// Filterpedia doesn't support code generators, color cube filters, filters that require NSValue
let exclusions = ["CIQRCodeGenerator",
@@ -58,13 +58,13 @@ class FilterNavigator: UIView
let tableView: UITableView =
{
- let tableView = UITableView(frame: CGRectZero,
- style: UITableViewStyle.Plain)
+ let tableView = UITableView(frame: CGRect.zero,
+ style: UITableView.Style.plain)
- tableView.registerClass(UITableViewHeaderFooterView.self,
+ tableView.register(UITableViewHeaderFooterView.self,
forHeaderFooterViewReuseIdentifier: "HeaderRenderer")
- tableView.registerClass(UITableViewCell.self,
+ tableView.register(UITableViewCell.self,
forCellReuseIdentifier: "ItemRenderer")
return tableView
@@ -92,7 +92,7 @@ class FilterNavigator: UIView
segmentedControl.selectedSegmentIndex = 0
segmentedControl.addTarget(self,
action: #selector(FilterNavigator.segmentedControlChange),
- forControlEvents: UIControlEvents.ValueChanged)
+ for: UIControl.Event.valueChanged)
addSubview(tableView)
addSubview(segmentedControl)
@@ -103,14 +103,14 @@ class FilterNavigator: UIView
fatalError("init(coder:) has not been implemented")
}
- func segmentedControlChange()
+ @objc func segmentedControlChange()
{
mode = segmentedControl.selectedSegmentIndex == 0 ? .Grouped : .Flat
}
override func layoutSubviews()
{
- let segmentedControlHeight = segmentedControl.intrinsicContentSize().height
+ let segmentedControlHeight = segmentedControl.intrinsicContentSize.height
tableView.frame = CGRect(x: 0,
y: 0,
@@ -129,25 +129,25 @@ class FilterNavigator: UIView
extension FilterNavigator: UITableViewDelegate
{
- func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
let filterName: String
switch mode
{
case .Grouped:
- filterName = supportedFilterNamesInCategory(filterCategories[indexPath.section]).sort()[indexPath.row]
+ filterName = supportedFilterNamesInCategory(filterCategories[indexPath.section]).sorted()[indexPath.row]
case .Flat:
- filterName = supportedFilterNamesInCategories(nil).sort
+ filterName = supportedFilterNamesInCategories(nil).sorted
{
- CIFilter.localizedNameForFilterName($0) ?? $0 < CIFilter.localizedNameForFilterName($1) ?? $1
+ CIFilter.localizedName(forFilterName: $0) ?? $0 < CIFilter.localizedName(forFilterName: $1) ?? $1
}[indexPath.row]
}
delegate?.filterNavigator(self, didSelectFilterName: filterName)
}
- func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
+ func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{
switch mode
{
@@ -158,14 +158,14 @@ extension FilterNavigator: UITableViewDelegate
}
}
- func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
+ func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
{
- let cell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("HeaderRenderer")! as UITableViewHeaderFooterView
+ let cell = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderRenderer")! as UITableViewHeaderFooterView
switch mode
{
case .Grouped:
- cell.textLabel?.text = CIFilter.localizedNameForCategory(filterCategories[section])
+ cell.textLabel?.text = CIFilter.localizedName(forCategory: filterCategories[section])
case .Flat:
cell.textLabel?.text = nil
}
@@ -173,17 +173,17 @@ extension FilterNavigator: UITableViewDelegate
return cell
}
- func supportedFilterNamesInCategory(category: String?) -> [String]
+ func supportedFilterNamesInCategory(_ category: String?) -> [String]
{
- return CIFilter.filterNamesInCategory(category).filter
+ return CIFilter.filterNames(inCategory: category).filter
{
!exclusions.contains($0)
}
}
- func supportedFilterNamesInCategories(categories: [String]?) -> [String]
+ func supportedFilterNamesInCategories(_ categories: [String]?) -> [String]
{
- return CIFilter.filterNamesInCategories(categories).filter
+ return CIFilter.filterNames(inCategories: categories).filter
{
!exclusions.contains($0)
}
@@ -194,7 +194,7 @@ extension FilterNavigator: UITableViewDelegate
extension FilterNavigator: UITableViewDataSource
{
- func numberOfSectionsInTableView(tableView: UITableView) -> Int
+ func numberOfSections(in tableView: UITableView) -> Int
{
switch mode
{
@@ -205,7 +205,7 @@ extension FilterNavigator: UITableViewDataSource
}
}
- func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
switch mode
{
@@ -216,25 +216,25 @@ extension FilterNavigator: UITableViewDataSource
}
}
- func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
- let cell = tableView.dequeueReusableCellWithIdentifier("ItemRenderer",
- forIndexPath: indexPath)
+ let cell = tableView.dequeueReusableCell(withIdentifier: "ItemRenderer",
+ for: indexPath)
let filterName: String
switch mode
{
case .Grouped:
- filterName = supportedFilterNamesInCategory(filterCategories[indexPath.section]).sort()[indexPath.row]
+ filterName = supportedFilterNamesInCategory(filterCategories[indexPath.section]).sorted()[indexPath.row]
case .Flat:
- filterName = supportedFilterNamesInCategories(nil).sort
+ filterName = supportedFilterNamesInCategories(nil).sorted
{
- CIFilter.localizedNameForFilterName($0) ?? $0 < CIFilter.localizedNameForFilterName($1) ?? $1
+ CIFilter.localizedName(forFilterName: $0) ?? $0 < CIFilter.localizedName(forFilterName: $1) ?? $1
}[indexPath.row]
}
- cell.textLabel?.text = CIFilter.localizedNameForFilterName(filterName) ?? (CIFilter(name: filterName)?.attributes[kCIAttributeFilterDisplayName] as? String) ?? filterName
+ cell.textLabel?.text = CIFilter.localizedName(forFilterName: filterName) ?? (CIFilter(name: filterName)?.attributes[kCIAttributeFilterDisplayName] as? String) ?? filterName
return cell
}
@@ -252,6 +252,6 @@ enum FilterNavigatorMode: String
protocol FilterNavigatorDelegate: class
{
- func filterNavigator(filterNavigator: FilterNavigator, didSelectFilterName: String)
+ func filterNavigator(_ filterNavigator: FilterNavigator, didSelectFilterName: String)
}
diff --git a/Filterpedia/components/HistogramDisplay.swift b/Filterpedia/components/HistogramDisplay.swift
old mode 100644
new mode 100755
index bab34bb..e400b11
--- a/Filterpedia/components/HistogramDisplay.swift
+++ b/Filterpedia/components/HistogramDisplay.swift
@@ -31,12 +31,12 @@ class HistogramDisplay: UIView
bitsPerPixel: 32,
colorSpace: nil,
bitmapInfo: CGBitmapInfo(
- rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue),
+ rawValue: CGImageAlphaInfo.premultipliedLast.rawValue),
version: 0,
decode: nil,
- renderingIntent: .RenderingIntentDefault)
+ renderingIntent: .defaultIntent)
- func histogramCalculation(imageRef: CGImage) -> (red: [UInt], green: [UInt], blue: [UInt])
+ func histogramCalculation(_ imageRef: CGImage) -> (red: [UInt], green: [UInt], blue: [UInt])
{
var inBuffer: vImage_Buffer = vImage_Buffer()
@@ -47,19 +47,19 @@ class HistogramDisplay: UIView
imageRef,
UInt32(kvImageNoFlags))
- let red = [UInt](count: 256, repeatedValue: 0)
- let green = [UInt](count: 256, repeatedValue: 0)
- let blue = [UInt](count: 256, repeatedValue: 0)
- let alpha = [UInt](count: 256, repeatedValue: 0)
+ let red = [UInt](repeating: 0, count: 256)
+ let green = [UInt](repeating: 0, count: 256)
+ let blue = [UInt](repeating: 0, count: 256)
+ let alpha = [UInt](repeating: 0, count: 256)
- let redPtr = UnsafeMutablePointer(red)
- let greenPtr = UnsafeMutablePointer(green)
- let bluePtr = UnsafeMutablePointer(blue)
- let alphaPtr = UnsafeMutablePointer(alpha)
+ let redPtr = UnsafeMutablePointer(mutating: red)
+ let greenPtr = UnsafeMutablePointer(mutating: green)
+ let bluePtr = UnsafeMutablePointer(mutating: blue)
+ let alphaPtr = UnsafeMutablePointer(mutating: alpha)
- let rgba = [redPtr, greenPtr, bluePtr, alphaPtr]
+ let rgba: [UnsafeMutablePointer?] = [redPtr, greenPtr, bluePtr, alphaPtr]
- let histogram = UnsafeMutablePointer>(rgba)
+ let histogram = UnsafeMutablePointer?>(mutating: rgba)
vImageHistogramCalculation_ARGB8888(&inBuffer, histogram, UInt32(kvImageNoFlags))
@@ -71,17 +71,17 @@ class HistogramDisplay: UIView
let scaleLabel: UILabel =
{
let label = UILabel()
- label.font = UIFont.monospacedDigitSystemFontOfSize(22, weight: UIFontWeightRegular)
- label.textAlignment = .Right
+ label.font = UIFont.monospacedDigitSystemFont(ofSize: 22, weight: UIFont.Weight.regular)
+ label.textAlignment = .right
label.text = "100%"
label.alpha = 0
return label
}()
- let redLayer = HistogramDisplay.createLayerForColor(UIColor.redColor())
- let greenLayer = HistogramDisplay.createLayerForColor(UIColor.greenColor())
- let blueLayer = HistogramDisplay.createLayerForColor(UIColor.blueColor())
+ let redLayer = HistogramDisplay.createLayerForColor(UIColor.red)
+ let greenLayer = HistogramDisplay.createLayerForColor(UIColor.green)
+ let blueLayer = HistogramDisplay.createLayerForColor(UIColor.blue)
var scale: CGFloat = 1
{
@@ -92,14 +92,14 @@ class HistogramDisplay: UIView
}
}
- static func createLayerForColor(color: UIColor) -> CAShapeLayer
+ static func createLayerForColor(_ color: UIColor) -> CAShapeLayer
{
let layer = CAShapeLayer()
- layer.strokeColor = color.CGColor
- layer.fillColor = color.colorWithAlphaComponent(0.5).CGColor
+ layer.strokeColor = color.cgColor
+ layer.fillColor = color.withAlphaComponent(0.5).cgColor
layer.masksToBounds = true
- layer.lineJoin = kCALineJoinRound
+ layer.lineJoin = CAShapeLayerLineJoin.round
return layer
}
@@ -108,8 +108,8 @@ class HistogramDisplay: UIView
{
super.init(frame: frame)
- backgroundColor = UIColor.lightGrayColor()
- layer.borderColor = UIColor.darkGrayColor().CGColor
+ backgroundColor = UIColor.lightGray
+ layer.borderColor = UIColor.darkGray.cgColor
layer.borderWidth = 1
layer.addSublayer(redLayer)
@@ -142,36 +142,36 @@ class HistogramDisplay: UIView
x: 0,
y: 0,
width: frame.width,
- height: scaleLabel.intrinsicContentSize().height)
+ height: scaleLabel.intrinsicContentSize.height)
}
- override func touchesBegan(touches: Set, withEvent event: UIEvent?)
+ override func touchesBegan(_ touches: Set, with event: UIEvent?)
{
- UIView.animateWithDuration(0.25)
- {
+ UIView.animate(withDuration: 0.25, animations: {
self.scaleLabel.alpha = 1
- }
+ })
+
}
- override func touchesMoved(touches: Set, withEvent event: UIEvent?)
+ override func touchesMoved(_ touches: Set, with event: UIEvent?)
{
guard let touch = touches.first else
{
return
}
- let direction = touch.locationInView(self).y - touch.previousLocationInView(self).y
+ let direction = touch.location(in: self).y - touch.previousLocation(in: self).y
scale -= direction / 20
drawHistogram()
}
- override func touchesEnded(touches: Set, withEvent event: UIEvent?)
+ override func touchesEnded(_ touches: Set, with event: UIEvent?)
{
- UIView.animateWithDuration(0.25)
- {
+ UIView.animate(withDuration: 0.25, animations: {
self.scaleLabel.alpha = 0
- }
+ })
+
}
func drawHistogram()
@@ -187,21 +187,21 @@ class HistogramDisplay: UIView
let histogram = histogramCalculation(imageRef)
let maximum = max(
- histogram.red.maxElement() ?? 0,
- histogram.green.maxElement() ?? 0,
- histogram.blue.maxElement() ?? 0)
+ histogram.red.max() ?? 0,
+ histogram.green.max() ?? 0,
+ histogram.blue.max() ?? 0)
drawChannel(histogram.red, maximum: maximum, layer: redLayer)
drawChannel(histogram.green, maximum: maximum, layer: greenLayer)
drawChannel(histogram.blue, maximum: maximum, layer: blueLayer)
}
- func drawChannel(data: [UInt], maximum: UInt, layer: CAShapeLayer)
+ func drawChannel(_ data: [UInt], maximum: UInt, layer: CAShapeLayer)
{
let path = UIBezierPath()
- path.moveToPoint(CGPoint(x: 0, y: frame.height))
+ path.move(to: CGPoint(x: 0, y: frame.height))
- let interpolationPoints: [CGPoint] = data.enumerate().map
+ let interpolationPoints: [CGPoint] = data.enumerated().map
{
(index, element) in
@@ -214,21 +214,21 @@ class HistogramDisplay: UIView
let curves = UIBezierPath()
curves.interpolatePointsWithHermite(interpolationPoints)
- path.appendPath(curves)
+ path.append(curves)
- path.addLineToPoint(CGPoint(x: frame.width, y: frame.height))
- path.addLineToPoint(CGPoint(x: 0, y: frame.height))
+ path.addLine(to: CGPoint(x: frame.width, y: frame.height))
+ path.addLine(to: CGPoint(x: 0, y: frame.height))
- layer.path = path.CGPath
+ layer.path = path.cgPath
}
}
extension UIBezierPath
{
- func interpolatePointsWithHermite(interpolationPoints : [CGPoint], alpha : CGFloat = 1.0/3.0)
+ func interpolatePointsWithHermite(_ interpolationPoints : [CGPoint], alpha : CGFloat = 1.0/3.0)
{
guard !interpolationPoints.isEmpty else { return }
- self.moveToPoint(interpolationPoints[0])
+ self.move(to: interpolationPoints[0])
let n = interpolationPoints.count - 1
@@ -274,7 +274,7 @@ extension UIBezierPath
let controlPoint2 = CGPoint(x: currentPoint.x - mx * alpha, y: currentPoint.y - my * alpha)
- self.addCurveToPoint(endPoint, controlPoint1: controlPoint1, controlPoint2: controlPoint2)
+ self.addCurve(to: endPoint, controlPoint1: controlPoint1, controlPoint2: controlPoint2)
}
}
}
diff --git a/Filterpedia/components/LabelledSlider.swift b/Filterpedia/components/LabelledSlider.swift
old mode 100644
new mode 100755
index f28054a..9201784
--- a/Filterpedia/components/LabelledSlider.swift
+++ b/Filterpedia/components/LabelledSlider.swift
@@ -57,14 +57,14 @@ class LabelledSlider: UIControl
{
super.init(frame: frame)
- minValueLabel.textAlignment = .Right
+ minValueLabel.textAlignment = .right
addSubview(minValueLabel)
addSubview(maxValueLabel)
addSubview(slider)
- slider.addTarget(self, action: #selector(LabelledSlider.sliderChangeHandler), forControlEvents: UIControlEvents.ValueChanged)
+ slider.addTarget(self, action: #selector(LabelledSlider.sliderChangeHandler), for: UIControl.Event.valueChanged)
}
required init?(coder aDecoder: NSCoder)
@@ -72,11 +72,11 @@ class LabelledSlider: UIControl
fatalError("init(coder:) has not been implemented")
}
- func sliderChangeHandler()
+ @objc func sliderChangeHandler()
{
value = slider.value
- sendActionsForControlEvents(UIControlEvents.ValueChanged)
+ sendActions(for: UIControl.Event.valueChanged)
}
override func layoutSubviews()
diff --git a/Filterpedia/components/VectorSlider.swift b/Filterpedia/components/VectorSlider.swift
old mode 100644
new mode 100755
index 56df28a..49a2ee4
--- a/Filterpedia/components/VectorSlider.swift
+++ b/Filterpedia/components/VectorSlider.swift
@@ -28,8 +28,8 @@ class VectorSlider: UIControl
{
let stackView = UIStackView()
- stackView.distribution = UIStackViewDistribution.FillEqually
- stackView.axis = UILayoutConstraintAxis.Horizontal
+ stackView.distribution = UIStackView.Distribution.fillEqually
+ stackView.axis = NSLayoutConstraint.Axis.horizontal
return stackView
}()
@@ -55,7 +55,7 @@ class VectorSlider: UIControl
}
}
- private(set) var vector: CIVector?
+ fileprivate(set) var vector: CIVector?
{
didSet
{
@@ -69,11 +69,11 @@ class VectorSlider: UIControl
return
}
- for (index, slider) in stackView.arrangedSubviews.enumerate() where slider is UISlider
+ for (index, slider) in stackView.arrangedSubviews.enumerated() where slider is UISlider
{
if let slider = slider as? UISlider
{
- slider.value = Float(vector.valueAtIndex(index))
+ slider.value = Float(vector.value(at: index))
}
}
}
@@ -98,13 +98,13 @@ class VectorSlider: UIControl
let slider = UISlider()
slider.maximumValue = Float(sliderMax)
- slider.addTarget(self, action: #selector(VectorSlider.sliderChangeHandler), forControlEvents: UIControlEvents.ValueChanged)
+ slider.addTarget(self, action: #selector(VectorSlider.sliderChangeHandler), for: UIControl.Event.valueChanged)
stackView.addArrangedSubview(slider)
}
}
- func sliderChangeHandler()
+ @objc func sliderChangeHandler()
{
let values = stackView.arrangedSubviews
.filter({ $0 is UISlider })
@@ -113,7 +113,7 @@ class VectorSlider: UIControl
vector = CIVector(values: values,
count: values.count)
- sendActionsForControlEvents(UIControlEvents.ValueChanged)
+ sendActions(for: UIControl.Event.valueChanged)
}
override func layoutSubviews()
@@ -139,9 +139,9 @@ extension CIVector
for i in 0 ..< self.count
{
maxValue = max(maxValue,
- self.valueAtIndex(i) > 1 ? self.valueAtIndex(i) * 2 : 1)
+ self.value(at: i) > 1 ? self.value(at: i) * 2 : 1)
}
return maxValue
}
-}
\ No newline at end of file
+}
diff --git a/Filterpedia/customFilters/Bokeh.swift b/Filterpedia/customFilters/Bokeh.swift
old mode 100644
new mode 100755
index de4ee45..35f1919
--- a/Filterpedia/customFilters/Bokeh.swift
+++ b/Filterpedia/customFilters/Bokeh.swift
@@ -39,15 +39,15 @@ class MaskedVariableHexagonalBokeh: MaskedVariableCircularBokeh
class MaskedVariableCircularBokeh: CIFilter
{
- var inputImage: CIImage?
- var inputBokehMask: CIImage?
- var inputMaxBokehRadius: CGFloat = 20
- var inputBlurRadius: CGFloat = 2
+ @objc var inputImage: CIImage?
+ @objc var inputBokehMask: CIImage?
+ @objc var inputMaxBokehRadius: CGFloat = 20
+ @objc var inputBlurRadius: CGFloat = 2
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: displayName(),
+ kCIAttributeFilterDisplayName: displayName() as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -81,7 +81,7 @@ class MaskedVariableCircularBokeh: CIFilter
lazy var maskedVariableBokeh: CIKernel =
{
- return CIKernel(string:
+ return CIKernel(source:
"kernel vec4 lumaVariableBlur(sampler image, sampler bokehMask, float maxBokehRadius) " +
"{ " +
" vec2 d = destCoord(); " +
@@ -127,15 +127,15 @@ class MaskedVariableCircularBokeh: CIFilter
override var outputImage: CIImage!
{
- guard let inputImage = inputImage, inputBlurMask = inputBokehMask else
+ guard let inputImage = inputImage, let inputBlurMask = inputBokehMask else
{
return nil
}
let extent = inputImage.extent
- let blur = maskedVariableBokeh.applyWithExtent(
- inputImage.extent,
+ let blur = maskedVariableBokeh.apply(
+ extent: inputImage.extent,
roiCallback:
{
(index, rect) in
@@ -144,8 +144,8 @@ class MaskedVariableCircularBokeh: CIFilter
arguments: [inputImage, inputBlurMask, inputMaxBokehRadius])
return blur!
- .imageByApplyingFilter("CIMaskedVariableBlur", withInputParameters: ["inputMask": inputBlurMask, "inputRadius": inputBlurRadius])
- .imageByCroppingToRect(extent)
+ .applyingFilter("CIMaskedVariableBlur", parameters: ["inputMask": inputBlurMask, "inputRadius": inputBlurRadius])
+ .cropped(to: extent)
}
}
@@ -157,10 +157,10 @@ class MaskedVariableCircularBokeh: CIFilter
class HexagonalBokehFilter: CIFilter, MetalRenderable
{
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Hexagonal Bokeh",
+ kCIAttributeFilterDisplayName: "Hexagonal Bokeh" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -187,26 +187,28 @@ class MaskedVariableCircularBokeh: CIFilter
]
}
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
{
didSet
{
if let inputImage = inputImage
{
- let textureDescriptor = MTLTextureDescriptor.texture2DDescriptorWithPixelFormat(
- .RGBA8Unorm,
+ let textureDescriptor = MTLTextureDescriptor.texture2DDescriptor(
+ pixelFormat: .rgba8Unorm,
width: Int(inputImage.extent.width),
height: Int(inputImage.extent.height),
mipmapped: false)
- sourceTexture = device.newTextureWithDescriptor(textureDescriptor)
- destinationTexture = device.newTextureWithDescriptor(textureDescriptor)
- intermediateTexture = device.newTextureWithDescriptor(textureDescriptor)
+ textureDescriptor.usage = [.shaderRead, .shaderWrite]
+
+ sourceTexture = device.makeTexture(descriptor: textureDescriptor)
+ destinationTexture = device.makeTexture(descriptor: textureDescriptor)
+ intermediateTexture = device.makeTexture(descriptor: textureDescriptor)
}
}
}
- var inputBokehRadius: CGFloat = 15
+ @objc var inputBokehRadius: CGFloat = 15
{
didSet
{
@@ -217,7 +219,7 @@ class MaskedVariableCircularBokeh: CIFilter
}
}
- var inputBlurSigma: CGFloat = 2
+ @objc var inputBlurSigma: CGFloat = 2
{
didSet
{
@@ -237,26 +239,26 @@ class MaskedVariableCircularBokeh: CIFilter
{
[unowned self] in
- return CIContext(MTLDevice: self.device)
+ return CIContext(mtlDevice: self.device)
}()
- let colorSpace = CGColorSpaceCreateDeviceRGB()!
+ let colorSpace = CGColorSpaceCreateDeviceRGB()
- private var probe = [Float]()
+ fileprivate var probe = [Float]()
- private var dilate: MPSImageDilate?
- private var blur: MPSImageGaussianBlur?
+ fileprivate var dilate: MPSImageDilate?
+ fileprivate var blur: MPSImageGaussianBlur?
- private var sourceTexture: MTLTexture?
- private var destinationTexture: MTLTexture?
- private var intermediateTexture: MTLTexture?
+ fileprivate var sourceTexture: MTLTexture?
+ fileprivate var destinationTexture: MTLTexture?
+ fileprivate var intermediateTexture: MTLTexture?
override var outputImage: CIImage?
{
guard let inputImage = inputImage,
- inputTexture = sourceTexture,
- outputTexture = destinationTexture,
- intermediateTexture = intermediateTexture else
+ let inputTexture = sourceTexture,
+ let outputTexture = destinationTexture,
+ let intermediateTexture = intermediateTexture else
{
return nil
}
@@ -271,32 +273,32 @@ class MaskedVariableCircularBokeh: CIFilter
createBlur()
}
- let commandQueue = device.newCommandQueue()
+ let commandQueue = device.makeCommandQueue()!
- let commandBuffer = commandQueue.commandBuffer()
+ let commandBuffer = commandQueue.makeCommandBuffer()!
ciContext.render(
inputImage,
- toMTLTexture: inputTexture,
+ to: inputTexture,
commandBuffer: commandBuffer,
bounds: inputImage.extent,
colorSpace: colorSpace)
- dilate!.encodeToCommandBuffer(
- commandBuffer,
+ dilate!.encode(
+ commandBuffer: commandBuffer,
sourceTexture: inputTexture,
destinationTexture: intermediateTexture)
- blur!.encodeToCommandBuffer(
- commandBuffer,
+ blur!.encode(
+ commandBuffer: commandBuffer,
sourceTexture: intermediateTexture,
destinationTexture: outputTexture)
commandBuffer.commit()
return CIImage(
- MTLTexture: outputTexture,
- options: [kCIImageColorSpace: colorSpace])
+ mtlTexture: outputTexture,
+ options: convertToOptionalCIImageOptionDictionary([convertFromCIImageOption(CIImageOption.colorSpace): colorSpace]))
}
func createDilate()
@@ -329,7 +331,7 @@ class MaskedVariableCircularBokeh: CIFilter
kernelHeight: size,
values: probe)
- dilate.edgeMode = .Clamp
+ dilate.edgeMode = .clamp
self.dilate = dilate
}
@@ -348,3 +350,14 @@ class MaskedVariableCircularBokeh: CIFilter
#endif
+
+// Helper function inserted by Swift 4.2 migrator.
+fileprivate func convertToOptionalCIImageOptionDictionary(_ input: [String: Any]?) -> [CIImageOption: Any]? {
+ guard let input = input else { return nil }
+ return Dictionary(uniqueKeysWithValues: input.map { key, value in (CIImageOption(rawValue: key), value)})
+}
+
+// Helper function inserted by Swift 4.2 migrator.
+fileprivate func convertFromCIImageOption(_ input: CIImageOption) -> String {
+ return input.rawValue
+}
diff --git a/Filterpedia/customFilters/CIKL_Sky.swift b/Filterpedia/customFilters/CIKL_Sky.swift
old mode 100644
new mode 100755
index 348f976..d80b27c
--- a/Filterpedia/customFilters/CIKL_Sky.swift
+++ b/Filterpedia/customFilters/CIKL_Sky.swift
@@ -10,19 +10,19 @@ import CoreImage
class SimpleSky: CIFilter
{
- var inputSunDiameter: CGFloat = 0.01
- var inputAlbedo: CGFloat = 0.2
- var inputSunAzimuth: CGFloat = 0.0
- var inputSunAlitude: CGFloat = 1.0
- var inputSkyDarkness: CGFloat = 1.25
- var inputScattering: CGFloat = 10.0
- var inputWidth: CGFloat = 640
- var inputHeight: CGFloat = 640
+ @objc var inputSunDiameter: CGFloat = 0.01
+ @objc var inputAlbedo: CGFloat = 0.2
+ @objc var inputSunAzimuth: CGFloat = 0.0
+ @objc var inputSunAlitude: CGFloat = 1.0
+ @objc var inputSkyDarkness: CGFloat = 1.25
+ @objc var inputScattering: CGFloat = 10.0
+ @objc var inputWidth: CGFloat = 640
+ @objc var inputHeight: CGFloat = 640
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Simple Sky",
+ kCIAttributeFilterDisplayName: "Simple Sky" as AnyObject,
"inputSunDiameter": [kCIAttributeIdentity: 0,
kCIAttributeClass: "NSNumber",
@@ -100,11 +100,11 @@ class SimpleSky: CIFilter
let skyKernel: CIColorKernel =
{
- let shaderPath = NSBundle.mainBundle().pathForResource("cikl_sky", ofType: "cikernel")
+ let shaderPath = Bundle.main.path(forResource: "cikl_sky", ofType: "cikernel")
guard let path = shaderPath,
- code = try? String(contentsOfFile: path),
- kernel = CIColorKernel(string: code) else
+ let code = try? String(contentsOfFile: path),
+ let kernel = CIColorKernel(source: code) else
{
fatalError("Unable to build Sky shader")
}
@@ -118,7 +118,7 @@ class SimpleSky: CIFilter
let arguments = [inputWidth, inputHeight, inputSunDiameter, inputAlbedo, inputSunAzimuth, inputSunAlitude, inputSkyDarkness, inputScattering]
- let final = skyKernel.applyWithExtent(extent, arguments: arguments)?.imageByCroppingToRect(extent)
+ let final = skyKernel.apply(extent: extent, arguments: arguments)?.cropped(to: extent)
return final
}
diff --git a/Filterpedia/customFilters/CMYKRegistrationMismatch.swift b/Filterpedia/customFilters/CMYKRegistrationMismatch.swift
old mode 100644
new mode 100755
index 585e8c1..8f1178f
--- a/Filterpedia/customFilters/CMYKRegistrationMismatch.swift
+++ b/Filterpedia/customFilters/CMYKRegistrationMismatch.swift
@@ -38,7 +38,7 @@ class CMYKToneCurves: CIFilter
" return vec4(c, m, y, k);" +
"}"
- static let cmykToRGBKernel = CIColorKernel(string:
+ static let cmykToRGBKernel = CIColorKernel(source:
"vec4 cmykToRGB(float c, float m, float y, float k)" +
"{" +
" float r = (1.0 - c) * (1.0 - k);" +
@@ -53,47 +53,47 @@ class CMYKToneCurves: CIFilter
"}"
)
- static let toCyanKernel = CIColorKernel(string: rgbToCMYK +
+ static let toCyanKernel = CIColorKernel(source: rgbToCMYK +
"kernel vec4 colorKernel(__sample pixel)" +
"{" +
" return vec4(rgbToCMYK(pixel.rgb).xxx, 1.0);" +
"}")
- static let toMagentaKernel = CIColorKernel(string: rgbToCMYK +
+ static let toMagentaKernel = CIColorKernel(source: rgbToCMYK +
"kernel vec4 colorKernel(__sample pixel)" +
"{" +
" return vec4(rgbToCMYK(pixel.rgb).yyy, 1.0);" +
"}")
- static let toYellowKernel = CIColorKernel(string: rgbToCMYK +
+ static let toYellowKernel = CIColorKernel(source: rgbToCMYK +
"kernel vec4 colorKernel(__sample pixel)" +
"{" +
" return vec4(rgbToCMYK(pixel.rgb).zzz, 1.0);" +
"}")
- static let toBlackKernel = CIColorKernel(string: rgbToCMYK +
+ static let toBlackKernel = CIColorKernel(source: rgbToCMYK +
"kernel vec4 colorKernel(__sample pixel)" +
"{" +
" return vec4(rgbToCMYK(pixel.rgb).www, 1.0);" +
"}")
- static func applyToneCurve(image: CIImage, values: CIVector) -> CIImage
+ static func applyToneCurve(_ image: CIImage, values: CIVector) -> CIImage
{
- return image.imageByApplyingFilter("CIToneCurve",
- withInputParameters: [
- "inputPoint0": CIVector(x: 0.0, y: values.valueAtIndex(0)),
- "inputPoint1": CIVector(x: 0.25, y: values.valueAtIndex(1)),
- "inputPoint2": CIVector(x: 0.5, y: values.valueAtIndex(2)),
- "inputPoint3": CIVector(x: 0.75, y: values.valueAtIndex(3)),
- "inputPoint4": CIVector(x: 1.0, y: values.valueAtIndex(4))
+ return image.applyingFilter("CIToneCurve",
+ parameters: [
+ "inputPoint0": CIVector(x: 0.0, y: values.value(at: 0)),
+ "inputPoint1": CIVector(x: 0.25, y: values.value(at: 1)),
+ "inputPoint2": CIVector(x: 0.5, y: values.value(at: 2)),
+ "inputPoint3": CIVector(x: 0.75, y: values.value(at: 3)),
+ "inputPoint4": CIVector(x: 1.0, y: values.value(at: 4))
])
}
- var inputImage: CIImage?
- var inputCyanValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
- var inputMagentaValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
- var inputYellowValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
- var inputBlackValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
+ @objc var inputImage: CIImage?
+ @objc var inputCyanValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
+ @objc var inputMagentaValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
+ @objc var inputYellowValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
+ @objc var inputBlackValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
override func setDefaults()
{
@@ -103,10 +103,10 @@ class CMYKToneCurves: CIFilter
inputBlackValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "CMYK Tone Curve",
+ kCIAttributeFilterDisplayName: "CMYK Tone Curve" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -152,10 +152,10 @@ class CMYKToneCurves: CIFilter
let extent = inputImage.extent
- let cyanImage = CMYKToneCurves.toCyanKernel?.applyWithExtent(extent, arguments: [inputImage])
- let magentaImage = CMYKToneCurves.toMagentaKernel?.applyWithExtent(extent, arguments: [inputImage])
- let yellowImage = CMYKToneCurves.toYellowKernel?.applyWithExtent(extent, arguments: [inputImage])
- let blackImage = CMYKToneCurves.toBlackKernel?.applyWithExtent(extent, arguments: [inputImage])
+ let cyanImage = CMYKToneCurves.toCyanKernel?.apply(extent: extent, arguments: [inputImage])
+ let magentaImage = CMYKToneCurves.toMagentaKernel?.apply(extent: extent, arguments: [inputImage])
+ let yellowImage = CMYKToneCurves.toYellowKernel?.apply(extent: extent, arguments: [inputImage])
+ let blackImage = CMYKToneCurves.toBlackKernel?.apply(extent: extent, arguments: [inputImage])
let cyan = CMYKToneCurves.applyToneCurve(cyanImage!, values: inputCyanValues)
let magenta = CMYKToneCurves.applyToneCurve(magentaImage!, values: inputMagentaValues)
@@ -163,7 +163,7 @@ class CMYKToneCurves: CIFilter
let black = CMYKToneCurves.applyToneCurve(blackImage!, values: inputBlackValues)
let final = CMYKToneCurves.cmykToRGBKernel?
- .applyWithExtent(inputImage.extent, arguments: [cyan, magenta, yellow, black])
+ .apply(extent: inputImage.extent, arguments: [cyan, magenta, yellow, black])
return final
}
@@ -177,17 +177,17 @@ class CMYKToneCurves: CIFilter
/// - Date: April 2016
class CMYKLevels: CIFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- var inputCyanMultiplier: CGFloat = 1
- var inputMagentaMultiplier: CGFloat = 1
- var inputYellowMultiplier: CGFloat = 1
- var inputBlackMultiplier: CGFloat = 1
+ @objc var inputCyanMultiplier: CGFloat = 1
+ @objc var inputMagentaMultiplier: CGFloat = 1
+ @objc var inputYellowMultiplier: CGFloat = 1
+ @objc var inputBlackMultiplier: CGFloat = 1
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "CMYK Levels",
+ kCIAttributeFilterDisplayName: "CMYK Levels" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -231,7 +231,7 @@ class CMYKLevels: CIFilter
]
}
- let kernel = CIColorKernel(string:
+ let kernel = CIColorKernel(source:
"vec4 rgbToCMYK(vec3 rgb)" +
"{" +
" float k = 1.0 - max(max(rgb.r, rgb.g), rgb.b); \n" +
@@ -265,15 +265,15 @@ class CMYKLevels: CIFilter
override var outputImage: CIImage!
{
guard let inputImage = inputImage,
- kernel = kernel else
+ let kernel = kernel else
{
return nil
}
let extent = inputImage.extent
- let arguments = [inputImage, inputCyanMultiplier, inputMagentaMultiplier, inputYellowMultiplier, inputBlackMultiplier]
+ let arguments = [inputImage, inputCyanMultiplier, inputMagentaMultiplier, inputYellowMultiplier, inputBlackMultiplier] as [Any]
- return kernel.applyWithExtent(extent, arguments: arguments)
+ return kernel.apply(extent: extent, arguments: arguments)
}
}
@@ -285,16 +285,16 @@ class CMYKLevels: CIFilter
/// - Date: April 2016
class CMYKRegistrationMismatch: CIFilter
{
- var inputImage: CIImage?
- var inputCyanOffset = CIVector(x: 5, y: 2)
- var inputMagentaOffset = CIVector(x: 1, y: 7)
- var inputYellowOffset = CIVector(x: 3, y: 4)
- var inputBlackOffset = CIVector(x: 7, y: 2)
+ @objc var inputImage: CIImage?
+ @objc var inputCyanOffset = CIVector(x: 5, y: 2)
+ @objc var inputMagentaOffset = CIVector(x: 1, y: 7)
+ @objc var inputYellowOffset = CIVector(x: 3, y: 4)
+ @objc var inputBlackOffset = CIVector(x: 7, y: 2)
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "CMYK Registration Mismatch",
+ kCIAttributeFilterDisplayName: "CMYK Registration Mismatch" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -326,7 +326,7 @@ class CMYKRegistrationMismatch: CIFilter
]
}
- let kernel = CIKernel(string:
+ let kernel = CIKernel(source:
"vec4 rgbToCMYK(vec3 rgb)" +
"{" +
@@ -368,12 +368,12 @@ class CMYKRegistrationMismatch: CIFilter
override var outputImage: CIImage?
{
- guard let inputImage = inputImage, kernel = kernel else
+ guard let inputImage = inputImage, let kernel = kernel else
{
return nil
}
- let final = kernel.applyWithExtent(inputImage.extent,
+ let final = kernel.apply(extent: inputImage.extent,
roiCallback:
{
(index, rect) in
diff --git a/Filterpedia/customFilters/CRTFilter.swift b/Filterpedia/customFilters/CRTFilter.swift
old mode 100644
new mode 100755
index b5d193d..d231dae
--- a/Filterpedia/customFilters/CRTFilter.swift
+++ b/Filterpedia/customFilters/CRTFilter.swift
@@ -12,11 +12,11 @@ import CoreImage
class VHSTrackingLines: CIFilter
{
- var inputImage: CIImage?
- var inputTime: CGFloat = 0
- var inputSpacing: CGFloat = 50
- var inputStripeHeight: CGFloat = 0.5
- var inputBackgroundNoise: CGFloat = 0.05
+ @objc var inputImage: CIImage?
+ @objc var inputTime: CGFloat = 0
+ @objc var inputSpacing: CGFloat = 50
+ @objc var inputStripeHeight: CGFloat = 0.5
+ @objc var inputBackgroundNoise: CGFloat = 0.05
override func setDefaults()
{
@@ -25,46 +25,46 @@ class VHSTrackingLines: CIFilter
inputBackgroundNoise = 0.05
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "VHS Tracking Lines",
+ kCIAttributeFilterDisplayName: "VHS Tracking Lines" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "CIImage",
- kCIAttributeDisplayName: "Image",
- kCIAttributeType: kCIAttributeTypeImage],
+ kCIAttributeClass: "CIImage",
+ kCIAttributeDisplayName: "Image",
+ kCIAttributeType: kCIAttributeTypeImage],
"inputTime": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 8,
- kCIAttributeDisplayName: "Time",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 2048,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 8,
+ kCIAttributeDisplayName: "Time",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 2048,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputSpacing": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 50,
- kCIAttributeDisplayName: "Spacing",
- kCIAttributeMin: 20,
- kCIAttributeSliderMin: 20,
- kCIAttributeSliderMax: 200,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 50,
+ kCIAttributeDisplayName: "Spacing",
+ kCIAttributeMin: 20,
+ kCIAttributeSliderMin: 20,
+ kCIAttributeSliderMax: 200,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputStripeHeight": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 0.5,
- kCIAttributeDisplayName: "Stripe Height",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 1,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 0.5,
+ kCIAttributeDisplayName: "Stripe Height",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 1,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputBackgroundNoise": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 0.05,
- kCIAttributeDisplayName: "Background Noise",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 0.25,
- kCIAttributeType: kCIAttributeTypeScalar]
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 0.05,
+ kCIAttributeDisplayName: "Background Noise",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 0.25,
+ kCIAttributeType: kCIAttributeTypeScalar]
]
}
@@ -75,17 +75,17 @@ class VHSTrackingLines: CIFilter
return nil
}
- let tx = NSValue(CGAffineTransform: CGAffineTransformMakeTranslation(CGFloat(drand48() * 100), CGFloat(drand48() * 100)))
+ let tx = NSValue(cgAffineTransform: CGAffineTransform(translationX: CGFloat(drand48() * 100), y: CGFloat(drand48() * 100)))
let noise = CIFilter(name: "CIRandomGenerator")!.outputImage!
- .imageByApplyingFilter("CIAffineTransform",
- withInputParameters: [kCIInputTransformKey: tx])
- .imageByApplyingFilter("CILanczosScaleTransform",
- withInputParameters: [kCIInputAspectRatioKey: 5])
- .imageByCroppingToRect(inputImage.extent)
+ .applyingFilter("CIAffineTransform",
+ parameters: [kCIInputTransformKey: tx])
+ .applyingFilter("CILanczosScaleTransform",
+ parameters: [kCIInputAspectRatioKey: 5])
+ .cropped(to: inputImage.extent)
- let kernel = CIColorKernel(string:
+ let kernel = CIColorKernel(source:
"kernel vec4 thresholdFilter(__sample image, __sample noise, float time, float spacing, float stripeHeight, float backgroundNoise)" +
"{" +
" vec2 uv = destCoord();" +
@@ -98,10 +98,10 @@ class VHSTrackingLines: CIFilter
let extent = inputImage.extent
- let arguments = [inputImage, noise, inputTime, inputSpacing, inputStripeHeight, inputBackgroundNoise]
+ let arguments = [inputImage, noise, inputTime, inputSpacing, inputStripeHeight, inputBackgroundNoise] as [Any]
- let final = kernel.applyWithExtent(extent, arguments: arguments)?
- .imageByApplyingFilter("CIPhotoEffectNoir", withInputParameters: nil)
+ let final = kernel.apply(extent: extent, arguments: arguments)?
+ .applyingFilter("CIPhotoEffectNoir", parameters: [:])
return final
}
@@ -109,43 +109,43 @@ class VHSTrackingLines: CIFilter
class CRTFilter: CIFilter
{
- var inputImage : CIImage?
- var inputPixelWidth: CGFloat = 8
- var inputPixelHeight: CGFloat = 12
- var inputBend: CGFloat = 3.2
+ @objc var inputImage : CIImage?
+ @objc var inputPixelWidth: CGFloat = 8
+ @objc var inputPixelHeight: CGFloat = 12
+ @objc var inputBend: CGFloat = 3.2
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "CRT Filter",
+ kCIAttributeFilterDisplayName: "CRT Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "CIImage",
- kCIAttributeDisplayName: "Image",
- kCIAttributeType: kCIAttributeTypeImage],
+ kCIAttributeClass: "CIImage",
+ kCIAttributeDisplayName: "Image",
+ kCIAttributeType: kCIAttributeTypeImage],
"inputPixelWidth": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 8,
- kCIAttributeDisplayName: "Pixel Width",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 20,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 8,
+ kCIAttributeDisplayName: "Pixel Width",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 20,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputPixelHeight": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 12,
- kCIAttributeDisplayName: "Pixel Height",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 20,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 12,
+ kCIAttributeDisplayName: "Pixel Height",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 20,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputBend": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 3.2,
- kCIAttributeDisplayName: "Bend",
- kCIAttributeMin: 0.5,
- kCIAttributeSliderMin: 0.5,
- kCIAttributeSliderMax: 10,
- kCIAttributeType: kCIAttributeTypeScalar]
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 3.2,
+ kCIAttributeDisplayName: "Bend",
+ kCIAttributeMin: 0.5,
+ kCIAttributeSliderMin: 0.5,
+ kCIAttributeSliderMax: 10,
+ kCIAttributeType: kCIAttributeTypeScalar]
]
}
@@ -153,9 +153,9 @@ class CRTFilter: CIFilter
let crtColorFilter = CRTColorFilter()
let vignette = CIFilter(name: "CIVignette",
- withInputParameters: [
- kCIInputIntensityKey: 1.5,
- kCIInputRadiusKey: 2])!
+ parameters: [
+ kCIInputIntensityKey: 1.5,
+ kCIInputRadiusKey: 2])!
override func setDefaults()
{
@@ -177,7 +177,7 @@ class CRTFilter: CIFilter
crtColorFilter.inputImage = inputImage
vignette.setValue(crtColorFilter.outputImage,
- forKey: kCIInputImageKey)
+ forKey: kCIInputImageKey)
crtWarpFilter.inputImage = vignette.outputImage!
return crtWarpFilter.outputImage
@@ -185,17 +185,17 @@ class CRTFilter: CIFilter
class CRTColorFilter: CIFilter
{
- var inputImage : CIImage?
+ @objc var inputImage : CIImage?
var pixelWidth: CGFloat = 8.0
var pixelHeight: CGFloat = 12.0
- let crtColorKernel = CIColorKernel(string:
+ let crtColorKernel = CIColorKernel(source:
"kernel vec4 crtColor(__sample image, float pixelWidth, float pixelHeight) \n" +
"{ \n" +
-
- " int columnIndex = int(mod(samplerCoord(image).x / pixelWidth, 3.0)); \n" +
- " int rowIndex = int(mod(samplerCoord(image).y, pixelHeight)); \n" +
+ " vec2 coord = destCoord(); \n" +
+ " int columnIndex = int(mod(coord.x / pixelWidth, 3.0)); \n" +
+ " int rowIndex = int(mod(coord.y, pixelHeight)); \n" +
" float scanlineMultiplier = (rowIndex == 0 || rowIndex == 1) ? 0.3 : 1.0;" +
@@ -211,11 +211,11 @@ class CRTFilter: CIFilter
override var outputImage: CIImage!
{
if let inputImage = inputImage,
- crtColorKernel = crtColorKernel
+ let crtColorKernel = crtColorKernel
{
let dod = inputImage.extent
- let args = [inputImage, pixelWidth, pixelHeight]
- return crtColorKernel.applyWithExtent(dod, arguments: args)
+ let args = [inputImage, pixelWidth, pixelHeight] as [Any]
+ return crtColorKernel.apply(extent: dod, arguments: args)
}
return nil
}
@@ -223,10 +223,10 @@ class CRTFilter: CIFilter
class CRTWarpFilter: CIFilter
{
- var inputImage : CIImage?
+ @objc var inputImage : CIImage?
var bend: CGFloat = 3.2
- let crtWarpKernel = CIWarpKernel(string:
+ let crtWarpKernel = CIWarpKernel(source:
"kernel vec2 crtWarp(vec2 extent, float bend)" +
"{" +
" vec2 coord = ((destCoord() / extent) - 0.5) * 2.0;" +
@@ -241,23 +241,23 @@ class CRTFilter: CIFilter
)
override var outputImage : CIImage!
+ {
+ if let inputImage = inputImage,
+ let crtWarpKernel = crtWarpKernel
{
- if let inputImage = inputImage,
- crtWarpKernel = crtWarpKernel
- {
- let arguments = [CIVector(x: inputImage.extent.size.width, y: inputImage.extent.size.height), bend]
- let extent = inputImage.extent.insetBy(dx: -1, dy: -1)
-
- return crtWarpKernel.applyWithExtent(extent,
- roiCallback:
- {
- (index, rect) in
- return rect
- },
- inputImage: inputImage,
- arguments: arguments)
- }
- return nil
+ let arguments = [CIVector(x: inputImage.extent.size.width, y: inputImage.extent.size.height), bend] as [Any]
+ let extent = inputImage.extent.insetBy(dx: -1, dy: -1)
+
+ return crtWarpKernel.apply(extent: extent,
+ roiCallback:
+ {
+ (index, rect) in
+ return rect
+ },
+ image: inputImage,
+ arguments: arguments)
+ }
+ return nil
}
}
}
diff --git a/Filterpedia/customFilters/CarnivalMirror.swift b/Filterpedia/customFilters/CarnivalMirror.swift
old mode 100644
new mode 100755
index f1d909f..8db2b29
--- a/Filterpedia/customFilters/CarnivalMirror.swift
+++ b/Filterpedia/customFilters/CarnivalMirror.swift
@@ -22,13 +22,13 @@ import CoreImage
class CarnivalMirror: CIFilter
{
- var inputImage : CIImage?
+ @objc var inputImage : CIImage?
- var inputHorizontalWavelength: CGFloat = 10
- var inputHorizontalAmount: CGFloat = 20
+ @objc var inputHorizontalWavelength: CGFloat = 10
+ @objc var inputHorizontalAmount: CGFloat = 20
- var inputVerticalWavelength: CGFloat = 10
- var inputVerticalAmount: CGFloat = 20
+ @objc var inputVerticalWavelength: CGFloat = 10
+ @objc var inputVerticalAmount: CGFloat = 20
override func setDefaults()
{
@@ -39,10 +39,10 @@ class CarnivalMirror: CIFilter
inputVerticalAmount = 20
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Carnival Mirror",
+ kCIAttributeFilterDisplayName: "Carnival Mirror" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -89,7 +89,7 @@ class CarnivalMirror: CIFilter
}
- let carnivalMirrorKernel = CIWarpKernel(string:
+ let carnivalMirrorKernel = CIWarpKernel(source:
"kernel vec2 carnivalMirror(float xWavelength, float xAmount, float yWavelength, float yAmount)" +
"{" +
" float y = destCoord().y + sin(destCoord().y / yWavelength) * yAmount; " +
@@ -101,7 +101,7 @@ class CarnivalMirror: CIFilter
override var outputImage : CIImage!
{
if let inputImage = inputImage,
- kernel = carnivalMirrorKernel
+ let kernel = carnivalMirrorKernel
{
let arguments = [
inputHorizontalWavelength, inputHorizontalAmount,
@@ -109,13 +109,13 @@ class CarnivalMirror: CIFilter
let extent = inputImage.extent
- return kernel.applyWithExtent(extent,
+ return kernel.apply(extent: extent,
roiCallback:
{
(index, rect) in
return rect
},
- inputImage: inputImage,
+ image: inputImage,
arguments: arguments)
}
return nil
diff --git a/Filterpedia/customFilters/CausticRefraction.swift b/Filterpedia/customFilters/CausticRefraction.swift
old mode 100644
new mode 100755
index 89fd163..17c37c1
--- a/Filterpedia/customFilters/CausticRefraction.swift
+++ b/Filterpedia/customFilters/CausticRefraction.swift
@@ -13,236 +13,236 @@ import CoreImage
class CausticNoise: CIFilter
{
- var inputTime: CGFloat = 1
- var inputTileSize: CGFloat = 640
- var inputWidth: CGFloat = 640
- var inputHeight: CGFloat = 640
-
- override var attributes: [String : AnyObject]
- {
- return [
- kCIAttributeFilterDisplayName: "Caustic Noise",
-
- "inputTime": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 1,
- kCIAttributeDisplayName: "Time",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 1000,
- kCIAttributeType: kCIAttributeTypeScalar],
- "inputTileSize": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 640,
- kCIAttributeDisplayName: "Tile Size",
- kCIAttributeMin: 10,
- kCIAttributeSliderMin: 10,
- kCIAttributeSliderMax: 2048,
- kCIAttributeType: kCIAttributeTypeScalar],
- "inputWidth": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 640,
- kCIAttributeDisplayName: "Width",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 1280,
- kCIAttributeType: kCIAttributeTypeScalar],
- "inputHeight": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 640,
- kCIAttributeDisplayName: "Height",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 1280,
- kCIAttributeType: kCIAttributeTypeScalar]
- ]
- }
-
- let causticNoiseKernel = CIColorKernel(
- string: "kernel vec4 mainImage(float time, float tileSize) " +
- "{ " +
- " vec2 uv = destCoord() / tileSize; " +
-
- " vec2 p = mod(uv * 6.28318530718, 6.28318530718) - 250.0; " +
-
- " vec2 i = vec2(p); " +
- " float c = 1.0; " +
- " float inten = .005; " +
-
- " for (int n = 0; n < 5; n++) " +
- " { " +
- " float t = time * (1.0 - (3.5 / float(n+1))); " +
- " i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(t + i.x)); " +
- " c += 1.0/length(vec2(p.x / (sin(i.x+t)/inten),p.y / (cos(i.y+t)/inten))); " +
- " } " +
- " c /= 5.0;" +
- " c = 1.17-pow(c, 1.4);" +
- " vec3 colour = vec3(pow(abs(c), 8.0));" +
- " colour = clamp(colour, 0.0, 1.0);" +
-
- " return vec4(colour, 1.0);" +
- "}"
- )
-
- override var outputImage: CIImage!
- {
- guard let causticNoiseKernel = causticNoiseKernel else
+ @objc var inputTime: CGFloat = 1
+ @objc var inputTileSize: CGFloat = 640
+ @objc var inputWidth: CGFloat = 640
+ @objc var inputHeight: CGFloat = 640
+
+ override var attributes: [String : Any]
{
- return nil
+ return [
+ kCIAttributeFilterDisplayName: "Caustic Noise" as AnyObject,
+
+ "inputTime": [kCIAttributeIdentity: 0,
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 1,
+ kCIAttributeDisplayName: "Time",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 1000,
+ kCIAttributeType: kCIAttributeTypeScalar],
+ "inputTileSize": [kCIAttributeIdentity: 0,
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 640,
+ kCIAttributeDisplayName: "Tile Size",
+ kCIAttributeMin: 10,
+ kCIAttributeSliderMin: 10,
+ kCIAttributeSliderMax: 2048,
+ kCIAttributeType: kCIAttributeTypeScalar],
+ "inputWidth": [kCIAttributeIdentity: 0,
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 640,
+ kCIAttributeDisplayName: "Width",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 1280,
+ kCIAttributeType: kCIAttributeTypeScalar],
+ "inputHeight": [kCIAttributeIdentity: 0,
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 640,
+ kCIAttributeDisplayName: "Height",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 1280,
+ kCIAttributeType: kCIAttributeTypeScalar]
+ ]
}
- let extent = CGRect(x: 0, y: 0, width: inputWidth, height: inputHeight)
+ let causticNoiseKernel = CIColorKernel(
+ source: "kernel vec4 mainImage(float time, float tileSize) " +
+ "{ " +
+ " vec2 uv = destCoord() / tileSize; " +
+
+ " vec2 p = mod(uv * 6.28318530718, 6.28318530718) - 250.0; " +
+
+ " vec2 i = vec2(p); " +
+ " float c = 1.0; " +
+ " float inten = .005; " +
+
+ " for (int n = 0; n < 5; n++) " +
+ " { " +
+ " float t = time * (1.0 - (3.5 / float(n+1))); " +
+ " i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(t + i.x)); " +
+ " c += 1.0/length(vec2(p.x / (sin(i.x+t)/inten),p.y / (cos(i.y+t)/inten))); " +
+ " } " +
+ " c /= 5.0;" +
+ " c = 1.17-pow(c, 1.4);" +
+ " vec3 colour = vec3(pow(abs(c), 8.0));" +
+ " colour = clamp(colour, 0.0, 1.0);" +
+
+ " return vec4(colour, 1.0);" +
+ "}"
+ )
- return causticNoiseKernel.applyWithExtent(extent, arguments: [inputTime, inputTileSize])
- }
+ override var outputImage: CIImage!
+ {
+ guard let causticNoiseKernel = causticNoiseKernel else
+ {
+ return nil
+ }
+
+ let extent = CGRect(x: 0, y: 0, width: inputWidth, height: inputHeight)
+
+ return causticNoiseKernel.apply(extent: extent, arguments: [inputTime, inputTileSize])
+ }
}
// MARK: CausticRefraction
class CausticRefraction: CIFilter
{
- var inputImage: CIImage?
- var inputRefractiveIndex: CGFloat = 4.0
- var inputLensScale: CGFloat = 50
- var inputLightingAmount: CGFloat = 1.5
- var inputTime: CGFloat = 1
- var inputTileSize: CGFloat = 640
- var inputSoftening: CGFloat = 3
+ @objc var inputImage: CIImage?
+ @objc var inputRefractiveIndex: CGFloat = 4.0
+ @objc var inputLensScale: CGFloat = 50
+ @objc var inputLightingAmount: CGFloat = 1.5
+ @objc var inputTime: CGFloat = 1
+ @objc var inputTileSize: CGFloat = 640
+ @objc var inputSoftening: CGFloat = 3
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Caustic Refraction",
+ kCIAttributeFilterDisplayName: "Caustic Refraction" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "CIImage",
- kCIAttributeDisplayName: "Image",
- kCIAttributeType: kCIAttributeTypeImage],
+ kCIAttributeClass: "CIImage",
+ kCIAttributeDisplayName: "Image",
+ kCIAttributeType: kCIAttributeTypeImage],
"inputText": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSString",
- kCIAttributeDisplayName: "Text",
- kCIAttributeDefault: "Filterpedia",
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSString",
+ kCIAttributeDisplayName: "Text",
+ kCIAttributeDefault: "Filterpedia",
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputRefractiveIndex": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 4.0,
- kCIAttributeDisplayName: "Refractive Index",
- kCIAttributeMin: -4.0,
- kCIAttributeSliderMin: -10.0,
- kCIAttributeSliderMax: 10,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 4.0,
+ kCIAttributeDisplayName: "Refractive Index",
+ kCIAttributeMin: -4.0,
+ kCIAttributeSliderMin: -10.0,
+ kCIAttributeSliderMax: 10,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputLensScale": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 50,
- kCIAttributeDisplayName: "Lens Scale",
- kCIAttributeMin: 1,
- kCIAttributeSliderMin: 1,
- kCIAttributeSliderMax: 100,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 50,
+ kCIAttributeDisplayName: "Lens Scale",
+ kCIAttributeMin: 1,
+ kCIAttributeSliderMin: 1,
+ kCIAttributeSliderMax: 100,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputLightingAmount": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 1.5,
- kCIAttributeDisplayName: "Lighting Amount",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 5,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 1.5,
+ kCIAttributeDisplayName: "Lighting Amount",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 5,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputTime": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 1,
- kCIAttributeDisplayName: "Time",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 1000,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 1,
+ kCIAttributeDisplayName: "Time",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 1000,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputTileSize": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 640,
- kCIAttributeDisplayName: "Tile Size",
- kCIAttributeMin: 10,
- kCIAttributeSliderMin: 10,
- kCIAttributeSliderMax: 2048,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 640,
+ kCIAttributeDisplayName: "Tile Size",
+ kCIAttributeMin: 10,
+ kCIAttributeSliderMin: 10,
+ kCIAttributeSliderMax: 2048,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputSoftening": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 3,
- kCIAttributeDisplayName: "Softening",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 20,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 3,
+ kCIAttributeDisplayName: "Softening",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 20,
+ kCIAttributeType: kCIAttributeTypeScalar],
]
}
override var outputImage: CIImage!
{
- guard let inputImage = inputImage,
- refractingKernel = refractingKernel else
- {
- return nil
- }
-
- let extent = inputImage.extent
-
- let refractingImage = CIFilter(
- name: "CausticNoise",
- withInputParameters: ["inputTime": inputTime, "inputTileSize": inputTileSize])?.outputImage!
- .imageByApplyingFilter(
- "CIGaussianBlur",
- withInputParameters: [kCIInputRadiusKey: inputSoftening])
-
- let arguments = [
- inputImage,
- refractingImage!,
- inputRefractiveIndex,
- inputLensScale,
- inputLightingAmount]
-
- return refractingKernel.applyWithExtent(
- extent,
- roiCallback:
+ guard let inputImage = inputImage,
+ let refractingKernel = refractingKernel else
{
- (index, rect) in
- return rect
- },
- arguments: arguments)
- }
-
- let refractingKernel = CIKernel(
- string: "float lumaAtOffset(sampler source, vec2 origin, vec2 offset)" +
- "{" +
- " vec3 pixel = sample(source, samplerTransform(source, origin + offset)).rgb;" +
- " float luma = dot(pixel, vec3(0.2126, 0.7152, 0.0722));" +
- " return luma;" +
- "}" +
-
-
- "kernel vec4 lumaBasedRefract(sampler image, sampler refractingImage, float refractiveIndex, float lensScale, float lightingAmount) \n" +
- "{ " +
- " vec2 d = destCoord();" +
-
- " float northLuma = lumaAtOffset(refractingImage, d, vec2(0.0, -1.0));" +
- " float southLuma = lumaAtOffset(refractingImage, d, vec2(0.0, 1.0));" +
- " float westLuma = lumaAtOffset(refractingImage, d, vec2(-1.0, 0.0));" +
- " float eastLuma = lumaAtOffset(refractingImage, d, vec2(1.0, 0.0));" +
+ return nil
+ }
- " vec3 lensNormal = normalize(vec3((eastLuma - westLuma), (southLuma - northLuma), 1.0));" +
+ let extent = inputImage.extent
- " vec3 refractVector = refract(vec3(0.0, 0.0, 1.0), lensNormal, refractiveIndex) * lensScale; " +
+ let refractingImage = CIFilter(
+ name: "CausticNoise",
+ parameters: ["inputTime": inputTime, "inputTileSize": inputTileSize])?.outputImage!
+ .applyingFilter(
+ "CIGaussianBlur",
+ parameters: [kCIInputRadiusKey: inputSoftening])
- " vec3 outputPixel = sample(image, samplerTransform(image, d + refractVector.xy)).rgb;" +
+ let arguments = [
+ inputImage,
+ refractingImage!,
+ inputRefractiveIndex,
+ inputLensScale,
+ inputLightingAmount] as [Any]
- " outputPixel += (northLuma - southLuma) * lightingAmount ;" +
- " outputPixel += (eastLuma - westLuma) * lightingAmount ;" +
-
- " return vec4(outputPixel, 1.0);" +
- "}"
+ return refractingKernel.apply(
+ extent: extent,
+ roiCallback:
+ {
+ (index, rect) in
+ return rect
+ },
+ arguments: arguments)
+ }
+
+ let refractingKernel = CIKernel(
+ source: "float lumaAtOffset(sampler source, vec2 origin, vec2 offset)" +
+ "{" +
+ " vec3 pixel = sample(source, samplerTransform(source, origin + offset)).rgb;" +
+ " float luma = dot(pixel, vec3(0.2126, 0.7152, 0.0722));" +
+ " return luma;" +
+ "}" +
+
+
+ "kernel vec4 lumaBasedRefract(sampler image, sampler refractingImage, float refractiveIndex, float lensScale, float lightingAmount) \n" +
+ "{ " +
+ " vec2 d = destCoord();" +
+
+ " float northLuma = lumaAtOffset(refractingImage, d, vec2(0.0, -1.0));" +
+ " float southLuma = lumaAtOffset(refractingImage, d, vec2(0.0, 1.0));" +
+ " float westLuma = lumaAtOffset(refractingImage, d, vec2(-1.0, 0.0));" +
+ " float eastLuma = lumaAtOffset(refractingImage, d, vec2(1.0, 0.0));" +
+
+ " vec3 lensNormal = normalize(vec3((eastLuma - westLuma), (southLuma - northLuma), 1.0));" +
+
+ " vec3 refractVector = refract(vec3(0.0, 0.0, 1.0), lensNormal, refractiveIndex) * lensScale; " +
+
+ " vec3 outputPixel = sample(image, samplerTransform(image, d + refractVector.xy)).rgb;" +
+
+ " outputPixel += (northLuma - southLuma) * lightingAmount ;" +
+ " outputPixel += (eastLuma - westLuma) * lightingAmount ;" +
+
+ " return vec4(outputPixel, 1.0);" +
+ "}"
)
}
diff --git a/Filterpedia/customFilters/ColorDirectedBlur.swift b/Filterpedia/customFilters/ColorDirectedBlur.swift
old mode 100644
new mode 100755
index eb8c150..965ab6e
--- a/Filterpedia/customFilters/ColorDirectedBlur.swift
+++ b/Filterpedia/customFilters/ColorDirectedBlur.swift
@@ -30,38 +30,38 @@ import CoreImage
class HomogeneousColorBlur: CIFilter
{
- var inputImage: CIImage?
- var inputColorThreshold: CGFloat = 0.2
- var inputRadius: CGFloat = 10
+ @objc var inputImage: CIImage?
+ @objc var inputColorThreshold: CGFloat = 0.2
+ @objc var inputRadius: CGFloat = 10
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Homogeneous Color Blur",
+ kCIAttributeFilterDisplayName: "Homogeneous Color Blur" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "CIImage",
- kCIAttributeDisplayName: "Image",
- kCIAttributeType: kCIAttributeTypeImage],
+ kCIAttributeClass: "CIImage",
+ kCIAttributeDisplayName: "Image",
+ kCIAttributeType: kCIAttributeTypeImage],
"inputColorThreshold": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 0.2,
- kCIAttributeDisplayName: "Color Threshold",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 1,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 0.2,
+ kCIAttributeDisplayName: "Color Threshold",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 1,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputRadius": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 10,
- kCIAttributeDisplayName: "Radius",
- kCIAttributeMin: 1,
- kCIAttributeSliderMin: 1,
- kCIAttributeSliderMax: 40,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 10,
+ kCIAttributeDisplayName: "Radius",
+ kCIAttributeMin: 1,
+ kCIAttributeSliderMin: 1,
+ kCIAttributeSliderMax: 40,
+ kCIAttributeType: kCIAttributeTypeScalar],
]
}
- let kernel = CIKernel(string:
+ let kernel = CIKernel(source:
"kernel vec4 colorDirectedBlurKernel(sampler image, float radius, float threshold)" +
"{" +
" int r = int(radius);" +
@@ -77,30 +77,30 @@ class HomogeneousColorBlur: CIFilter
" float distanceMultiplier = step(length(vec2(x,y)), radius); \n" +
" float colorMultiplier = step(distance(offsetPixel, thisPixel), threshold); \n" +
-
+
" accumulator += offsetPixel * distanceMultiplier * colorMultiplier; \n" +
" n += distanceMultiplier * colorMultiplier; \n" +
" }" +
" }" +
" return vec4(accumulator / n, 1.0); " +
- "}")
+ "}")
override var outputImage: CIImage?
{
- guard let inputImage = inputImage, kernel = kernel else
+ guard let inputImage = inputImage, let kernel = kernel else
{
return nil
}
- let arguments = [inputImage, inputRadius, inputColorThreshold * sqrt(3.0)]
+ let arguments = [inputImage, inputRadius, inputColorThreshold * sqrt(3.0)] as [Any]
- return kernel.applyWithExtent(
- inputImage.extent,
+ return kernel.apply(
+ extent: inputImage.extent,
roiCallback:
{
- (index, rect) in
- return rect
- },
+ (index, rect) in
+ return rect
+ },
arguments: arguments)
}
}
@@ -121,125 +121,125 @@ class HomogeneousColorBlur: CIFilter
class ColorDirectedBlur: CIFilter
{
- var inputImage: CIImage?
- var inputThreshold: CGFloat = 0.5
- var inputIterations: CGFloat = 4
- var inputRadius: CGFloat = 10
+ @objc var inputImage: CIImage?
+ @objc var inputThreshold: CGFloat = 0.5
+ @objc var inputIterations: CGFloat = 4
+ @objc var inputRadius: CGFloat = 10
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Color Directed Blur",
+ kCIAttributeFilterDisplayName: "Color Directed Blur" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "CIImage",
- kCIAttributeDisplayName: "Image",
- kCIAttributeType: kCIAttributeTypeImage],
+ kCIAttributeClass: "CIImage",
+ kCIAttributeDisplayName: "Image",
+ kCIAttributeType: kCIAttributeTypeImage],
"inputThreshold": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 0.5,
- kCIAttributeDisplayName: "Threshold",
- kCIAttributeMin: 0,
- kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: 1,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 0.5,
+ kCIAttributeDisplayName: "Threshold",
+ kCIAttributeMin: 0,
+ kCIAttributeSliderMin: 0,
+ kCIAttributeSliderMax: 1,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputIterations": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 4,
- kCIAttributeDisplayName: "Iterations",
- kCIAttributeMin: 1,
- kCIAttributeSliderMin: 1,
- kCIAttributeSliderMax: 10,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 4,
+ kCIAttributeDisplayName: "Iterations",
+ kCIAttributeMin: 1,
+ kCIAttributeSliderMin: 1,
+ kCIAttributeSliderMax: 10,
+ kCIAttributeType: kCIAttributeTypeScalar],
"inputRadius": [kCIAttributeIdentity: 0,
- kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: 10,
- kCIAttributeDisplayName: "Radius",
- kCIAttributeMin: 3,
- kCIAttributeSliderMin: 3,
- kCIAttributeSliderMax: 20,
- kCIAttributeType: kCIAttributeTypeScalar],
+ kCIAttributeClass: "NSNumber",
+ kCIAttributeDefault: 10,
+ kCIAttributeDisplayName: "Radius",
+ kCIAttributeMin: 3,
+ kCIAttributeSliderMin: 3,
+ kCIAttributeSliderMax: 20,
+ kCIAttributeType: kCIAttributeTypeScalar],
]
}
- let kernel = CIKernel(string:
+ let kernel = CIKernel(source:
"kernel vec4 colorDirectedBlurKernel(sampler image, float radius, float threshold)" +
- "{" +
-
- " int r = int(radius);" +
- " float n = 0.0;" +
- " vec2 d = destCoord();" +
- " vec3 thisPixel = sample(image, samplerCoord(image)).rgb;" +
-
- " vec3 nwAccumulator = vec3(0.0, 0.0, 0.0);" +
- " vec3 neAccumulator = vec3(0.0, 0.0, 0.0);" +
- " vec3 swAccumulator = vec3(0.0, 0.0, 0.0);" +
- " vec3 seAccumulator = vec3(0.0, 0.0, 0.0);" +
-
- " for (int x = 0; x <= r; x++) " +
- " { " +
- " for (int y = 0; y <= r; y++) " +
- " { " +
- " nwAccumulator += sample(image, samplerTransform(image, d + vec2(-x ,-y))).rgb; " +
- " neAccumulator += sample(image, samplerTransform(image, d + vec2(x ,-y))).rgb; " +
- " swAccumulator += sample(image, samplerTransform(image, d + vec2(-x ,y))).rgb; " +
- " seAccumulator += sample(image, samplerTransform(image, d + vec2(x ,y))).rgb; " +
- " n = n + 1.0; " +
- " } " +
- " } " +
-
- " nwAccumulator /= n;" +
- " neAccumulator /= n;" +
- " swAccumulator /= n;" +
- " seAccumulator /= n;" +
-
- " float nwDiff = distance(thisPixel, nwAccumulator); " +
- " float neDiff = distance(thisPixel, neAccumulator); " +
- " float swDiff = distance(thisPixel, swAccumulator); " +
- " float seDiff = distance(thisPixel, seAccumulator); " +
-
- " if (nwDiff >= threshold && neDiff >= threshold && swDiff >= threshold && seDiff >= threshold)" +
- " {return vec4(thisPixel, 1.0);}" +
-
- " if(nwDiff < neDiff && nwDiff < swDiff && nwDiff < seDiff) " +
- " { return vec4 (nwAccumulator, 1.0 ); }" +
-
- " if(neDiff < nwDiff && neDiff < swDiff && neDiff < seDiff) " +
- " { return vec4 (neAccumulator, 1.0 ); }" +
-
- " if(swDiff < nwDiff && swDiff < neDiff && swDiff < seDiff) " +
- " { return vec4 (swAccumulator, 1.0 ); }" +
-
- " if(seDiff < nwDiff && seDiff < neDiff && seDiff < swDiff) " +
- " { return vec4 (seAccumulator, 1.0 ); }" +
-
- " return vec4(thisPixel, 1.0); " +
+ "{" +
+
+ " int r = int(radius);" +
+ " float n = 0.0;" +
+ " vec2 d = destCoord();" +
+ " vec3 thisPixel = sample(image, samplerCoord(image)).rgb;" +
+
+ " vec3 nwAccumulator = vec3(0.0, 0.0, 0.0);" +
+ " vec3 neAccumulator = vec3(0.0, 0.0, 0.0);" +
+ " vec3 swAccumulator = vec3(0.0, 0.0, 0.0);" +
+ " vec3 seAccumulator = vec3(0.0, 0.0, 0.0);" +
+
+ " for (int x = 0; x <= r; x++) " +
+ " { " +
+ " for (int y = 0; y <= r; y++) " +
+ " { " +
+ " nwAccumulator += sample(image, samplerTransform(image, d + vec2(-x ,-y))).rgb; " +
+ " neAccumulator += sample(image, samplerTransform(image, d + vec2(x ,-y))).rgb; " +
+ " swAccumulator += sample(image, samplerTransform(image, d + vec2(-x ,y))).rgb; " +
+ " seAccumulator += sample(image, samplerTransform(image, d + vec2(x ,y))).rgb; " +
+ " n = n + 1.0; " +
+ " } " +
+ " } " +
+
+ " nwAccumulator /= n;" +
+ " neAccumulator /= n;" +
+ " swAccumulator /= n;" +
+ " seAccumulator /= n;" +
+
+ " float nwDiff = distance(thisPixel, nwAccumulator); " +
+ " float neDiff = distance(thisPixel, neAccumulator); " +
+ " float swDiff = distance(thisPixel, swAccumulator); " +
+ " float seDiff = distance(thisPixel, seAccumulator); " +
+
+ " if (nwDiff >= threshold && neDiff >= threshold && swDiff >= threshold && seDiff >= threshold)" +
+ " {return vec4(thisPixel, 1.0);}" +
+
+ " if(nwDiff < neDiff && nwDiff < swDiff && nwDiff < seDiff) " +
+ " { return vec4 (nwAccumulator, 1.0 ); }" +
+
+ " if(neDiff < nwDiff && neDiff < swDiff && neDiff < seDiff) " +
+ " { return vec4 (neAccumulator, 1.0 ); }" +
+
+ " if(swDiff < nwDiff && swDiff < neDiff && swDiff < seDiff) " +
+ " { return vec4 (swAccumulator, 1.0 ); }" +
+
+ " if(seDiff < nwDiff && seDiff < neDiff && seDiff < swDiff) " +
+ " { return vec4 (seAccumulator, 1.0 ); }" +
+
+ " return vec4(thisPixel, 1.0); " +
"}"
)
override var outputImage: CIImage?
{
- guard let inputImage = inputImage, kernel = kernel else
+ guard let inputImage = inputImage, let kernel = kernel else
{
return nil
}
- let accumulator = CIImageAccumulator(extent: inputImage.extent, format: kCIFormatARGB8)
+ let accumulator = CIImageAccumulator(extent: inputImage.extent, format: CIFormat.ARGB8)
- accumulator.setImage(inputImage)
+ accumulator?.setImage(inputImage)
for _ in 0 ... Int(inputIterations)
{
- let final = kernel.applyWithExtent(inputImage.extent,
- roiCallback:
+ let final = kernel.apply(extent: inputImage.extent,
+ roiCallback:
{
(index, rect) in
return rect
- },
- arguments: [accumulator.image(), inputRadius, 1 - inputThreshold])
+ },
+ arguments: [accumulator!.image(), inputRadius, 1 - inputThreshold])
- accumulator.setImage(final!)
+ accumulator?.setImage(final!)
}
- return accumulator.image()
+ return accumulator?.image()
}
}
diff --git a/Filterpedia/customFilters/CompoundEye.swift b/Filterpedia/customFilters/CompoundEye.swift
old mode 100644
new mode 100755
index 3301a14..946dc39
--- a/Filterpedia/customFilters/CompoundEye.swift
+++ b/Filterpedia/customFilters/CompoundEye.swift
@@ -25,16 +25,16 @@ import CoreImage
class CompoundEye: CIFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- var inputWidth: CGFloat = 32
- var inputBend: CGFloat = 4.0
- var inputBackgroundColor = CIColor(red: 0.2, green: 0.2, blue: 0.2)
+ @objc var inputWidth: CGFloat = 32
+ @objc var inputBend: CGFloat = 4.0
+ @objc var inputBackgroundColor = CIColor(red: 0.2, green: 0.2, blue: 0.2)
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Compound Eye",
+ kCIAttributeFilterDisplayName: "Compound Eye" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -74,7 +74,7 @@ class CompoundEye: CIFilter
inputBackgroundColor = CIColor(red: 0.2, green: 0.2, blue: 0.2)
}
- let colorKernel = CIColorKernel(string:
+ let colorKernel = CIColorKernel(source:
"kernel vec4 color(float width, float halfWidth, float height, float diameter)" +
"{" +
" float y = float(int(destCoord().y / height)) * height; " +
@@ -91,7 +91,7 @@ class CompoundEye: CIFilter
"}"
)
- let warpKernel = CIWarpKernel(string:
+ let warpKernel = CIWarpKernel(source:
"kernel vec2 warp(float width, float halfWidth, float height, float diameter, float bend)" +
"{ " +
@@ -120,8 +120,8 @@ class CompoundEye: CIFilter
override var outputImage : CIImage!
{
if let inputImage = inputImage,
- warpKernel = warpKernel,
- colorKernel = colorKernel
+ let warpKernel = warpKernel,
+ let colorKernel = colorKernel
{
let halfWidth = inputWidth / 2
let height = sqrt(3.0) / 2.0 * inputWidth
@@ -129,23 +129,23 @@ class CompoundEye: CIFilter
let extent = inputImage.extent
- let warpedImage = warpKernel.applyWithExtent(extent,
+ let warpedImage = warpKernel.apply(extent: extent,
roiCallback:
{
(index, rect) in
return rect
},
- inputImage: inputImage,
+ image: inputImage,
arguments: [inputWidth, halfWidth, height, diameter, inputBend])!
- let maskImage = colorKernel.applyWithExtent(extent,
+ let maskImage = colorKernel.apply(extent: extent,
arguments: [inputWidth, halfWidth, height, diameter])!
let backgroundImage = CIImage(color: inputBackgroundColor)
- .imageByCroppingToRect(extent)
+ .cropped(to: extent)
return CIFilter(name: "CIBlendWithMask",
- withInputParameters: [
+ parameters: [
kCIInputBackgroundImageKey: warpedImage,
kCIInputImageKey: backgroundImage,
kCIInputMaskImageKey: maskImage])?.outputImage
diff --git a/Filterpedia/customFilters/ConcentricSineWaves.swift b/Filterpedia/customFilters/ConcentricSineWaves.swift
old mode 100644
new mode 100755
index ba3ebf3..7c86753
--- a/Filterpedia/customFilters/ConcentricSineWaves.swift
+++ b/Filterpedia/customFilters/ConcentricSineWaves.swift
@@ -22,25 +22,25 @@ import CoreImage
class ConcentricSineWaves: CIFilter
{
- var inputWidth: CGFloat = 40
- var inputAmplitude: CGFloat = 80
- var inputFrequency: CGFloat = 6
+ @objc var inputWidth: CGFloat = 40
+ @objc var inputAmplitude: CGFloat = 80
+ @objc var inputFrequency: CGFloat = 6
- var inputColor0 = CIColor(red: 0.6, green: 0.6, blue: 0.1)
- var inputColor1 = CIColor(red: 0.1, green: 0.1, blue: 0.8)
+ @objc var inputColor0 = CIColor(red: 0.6, green: 0.6, blue: 0.1)
+ @objc var inputColor1 = CIColor(red: 0.1, green: 0.1, blue: 0.8)
- var inputSize = CIVector(x: 640, y: 640)
- var inputCenter = CIVector(x: 320, y: 320)
+ @objc var inputSize = CIVector(x: 640, y: 640)
+ @objc var inputCenter = CIVector(x: 320, y: 320)
override func setDefaults()
{
inputCenter = CIVector(x: 320, y: 320)
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Concentric Sine Waves",
+ kCIAttributeFilterDisplayName: "Concentric Sine Waves" as AnyObject,
"inputWidth": [kCIAttributeIdentity: 0,
kCIAttributeClass: "NSNumber",
@@ -95,7 +95,7 @@ class ConcentricSineWaves: CIFilter
]
}
- let kernel = CIColorKernel(string:
+ let kernel = CIColorKernel(source:
"kernel vec4 concentricSineWaves(float ringWidth, vec2 center, float amplitude, float frequency, vec4 color0, vec4 color1)" +
"{" +
@@ -117,11 +117,11 @@ class ConcentricSineWaves: CIFilter
}
let extent = CGRect(
- origin: CGPointZero,
- size: CGSize(width: inputSize.X, height: inputSize.Y))
+ origin: CGPoint.zero,
+ size: CGSize(width: inputSize.x, height: inputSize.y))
- return kernel.applyWithExtent(
- extent,
+ return kernel.apply(
+ extent: extent,
arguments: [inputWidth, inputCenter, inputAmplitude, Int(inputFrequency), inputColor0, inputColor1])
}
}
diff --git a/Filterpedia/customFilters/CustomFilters.swift b/Filterpedia/customFilters/CustomFilters.swift
old mode 100644
new mode 100755
index 07e97a0..c9510f8
--- a/Filterpedia/customFilters/CustomFilters.swift
+++ b/Filterpedia/customFilters/CustomFilters.swift
@@ -26,420 +26,420 @@ class CustomFiltersVendor: NSObject, CIFilterConstructor
{
static func registerFilters()
{
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"ThresholdFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"ThresholdToAlphaFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"CRTFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"VignetteNoirFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"MercurializeFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"VintageVignette",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"RGBChannelCompositing",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"RGBChannelGaussianBlur",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"RGBChannelToneCurve",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"PseudoColor",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"KuwaharaFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"MetalPixellateFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"MetalKuwaharaFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"MetalPerlinNoise",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"StarBurstFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"ChromaticAberration",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"RGBChannelBrightnessAndContrast",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"VHSTrackingLines",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"EightBit",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"TechnicolorFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"BleachBypassFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"CarnivalMirror",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"BayerDitherFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"CompoundEye",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"DifferenceOfGaussians",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"AdvancedMonochrome",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"RefractedTextFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"SobelEdgeDetection5x5",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"SobelEdgeDetection3x3",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"MultiBandHSV",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"PolarPixellate",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"ModelIOSkyGenerator",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"ModelIOColorScalarNoise",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"ModelIOColorFromTemperature",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"CausticRefraction",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"CausticNoise",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"ColorDirectedBlur",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"CMYKRegistrationMismatch",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"CMYKLevels",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"CMYKToneCurves",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"SmoothThreshold",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"VoronoiNoise",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"NormalMap",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"HistogramSpecification",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"ContrastStretch",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"HistogramEqualization",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"SimpleSky",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"LensFlare",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"HexagonalBokehFilter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"MaskedVariableCircularBokeh",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"MaskedVariableHexagonalBokeh",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"CircularBokeh",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"EndsInContrastStretch",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"HomogeneousColorBlur",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"SimplePlasma",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"ConcentricSineWaves",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"Scatter",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"ScatterWarp",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"TransverseChromaticAberration",
constructor: CustomFiltersVendor(),
classAttributes: [
kCIAttributeFilterCategories: [CategoryCustomFilters]
])
- CIFilter.registerFilterName(
+ CIFilter.registerName(
"Flame",
constructor: CustomFiltersVendor(),
classAttributes: [
@@ -447,7 +447,7 @@ class CustomFiltersVendor: NSObject, CIFilterConstructor
])
}
- func filterWithName(name: String) -> CIFilter?
+ func filter(withName name: String) -> CIFilter?
{
switch name
{
@@ -663,20 +663,20 @@ class CustomFiltersVendor: NSObject, CIFilterConstructor
class PseudoColor: CIFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- var inputSmoothness = CGFloat(0.5)
+ @objc var inputSmoothness = CGFloat(0.5)
- var inputColor0 = CIColor(red: 1, green: 0, blue: 1)
- var inputColor1 = CIColor(red: 0, green: 0, blue: 1)
- var inputColor2 = CIColor(red: 0, green: 1, blue: 0)
- var inputColor3 = CIColor(red: 1, green: 0, blue: 1)
- var inputColor4 = CIColor(red: 0, green: 1, blue: 1)
+ @objc var inputColor0 = CIColor(red: 1, green: 0, blue: 1)
+ @objc var inputColor1 = CIColor(red: 0, green: 0, blue: 1)
+ @objc var inputColor2 = CIColor(red: 0, green: 1, blue: 0)
+ @objc var inputColor3 = CIColor(red: 1, green: 0, blue: 1)
+ @objc var inputColor4 = CIColor(red: 0, green: 1, blue: 1)
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Pseudo Color Filter",
+ kCIAttributeFilterDisplayName: "Pseudo Color Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -725,7 +725,7 @@ class PseudoColor: CIFilter
]
}
- let pseudoColorKernel = CIColorKernel(string:
+ let pseudoColorKernel = CIColorKernel(source:
"vec4 getColor(vec4 color0, vec4 color1, float edge0, float edge1, float luma, float smoothness) \n" +
"{ \n" +
" vec4 smoothColor = color0 + ((color1 - color0) * smoothstep(edge0, edge1, luma)); \n" +
@@ -754,15 +754,15 @@ class PseudoColor: CIFilter
override var outputImage: CIImage!
{
guard let inputImage = inputImage,
- pseudoColorKernel = pseudoColorKernel else
+ let pseudoColorKernel = pseudoColorKernel else
{
return nil
}
let extent = inputImage.extent
- let arguments = [inputImage, inputSmoothness, inputColor0, inputColor1, inputColor2, inputColor3, inputColor4]
+ let arguments = [inputImage, inputSmoothness, inputColor0, inputColor1, inputColor2, inputColor3, inputColor4] as [Any]
- return pseudoColorKernel.applyWithExtent(extent, arguments: arguments)
+ return pseudoColorKernel.apply(extent: extent, arguments: arguments)
}
}
@@ -773,16 +773,16 @@ class PseudoColor: CIFilter
class VintageVignette: CIFilter
{
- var inputImage : CIImage?
+ @objc var inputImage : CIImage?
- var inputVignetteIntensity: CGFloat = 1
- var inputVignetteRadius: CGFloat = 1
- var inputSepiaToneIntensity: CGFloat = 1
+ @objc var inputVignetteIntensity: CGFloat = 1
+ @objc var inputVignetteRadius: CGFloat = 1
+ @objc var inputSepiaToneIntensity: CGFloat = 1
-override var attributes: [String : AnyObject]
+override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Vintage Vignette",
+ kCIAttributeFilterDisplayName: "Vintage Vignette" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -833,12 +833,12 @@ override var attributes: [String : AnyObject]
}
let finalImage = inputImage
- .imageByApplyingFilter("CIVignette",
- withInputParameters: [
+ .applyingFilter("CIVignette",
+ parameters: [
kCIInputIntensityKey: inputVignetteIntensity,
kCIInputRadiusKey: inputVignetteRadius])
- .imageByApplyingFilter("CISepiaTone",
- withInputParameters: [
+ .applyingFilter("CISepiaTone",
+ parameters: [
kCIInputIntensityKey: inputSepiaToneIntensity])
return finalImage
@@ -850,14 +850,14 @@ override var attributes: [String : AnyObject]
class DifferenceOfGaussians: CIFilter
{
- var inputImage : CIImage?
- var inputSigma0: CGFloat = 0.75
- var inputSigma1: CGFloat = 3.25
+ @objc var inputImage : CIImage?
+ @objc var inputSigma0: CGFloat = 0.75
+ @objc var inputSigma1: CGFloat = 3.25
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Difference of Gaussians",
+ kCIAttributeFilterDisplayName: "Difference of Gaussians" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -891,21 +891,21 @@ class DifferenceOfGaussians: CIFilter
}
let blurred0 = DifferenceOfGaussians.gaussianBlurWithSigma(inputSigma0, image: inputImage)
- .imageByCroppingToRect(inputImage.extent)
+ .cropped(to: inputImage.extent)
let blurred1 = DifferenceOfGaussians.gaussianBlurWithSigma(inputSigma1, image: inputImage)
- .imageByCroppingToRect(inputImage.extent)
+ .cropped(to: inputImage.extent)
return blurred0
- .imageByApplyingFilter("CISubtractBlendMode",
- withInputParameters: ["inputBackgroundImage": blurred1])
- .imageByApplyingFilter("CIColorMatrix",
- withInputParameters: ["inputBiasVector": CIVector(x: 0, y: 0, z: 0, w: 1)])
- .imageByCroppingToRect(inputImage.extent)
+ .applyingFilter("CISubtractBlendMode",
+ parameters: ["inputBackgroundImage": blurred1])
+ .applyingFilter("CIColorMatrix",
+ parameters: ["inputBiasVector": CIVector(x: 0, y: 0, z: 0, w: 1)])
+ .cropped(to: inputImage.extent)
}
- static func gaussianBlurWithSigma(sigma: CGFloat, image: CIImage) -> CIImage
+ static func gaussianBlurWithSigma(_ sigma: CGFloat, image: CIImage) -> CIImage
{
- let weightsArray: [CGFloat] = (-4).stride(through: 4, by: 1).map
+ let weightsArray: [CGFloat] = stride(from: (-4), through: 4, by: 1).map
{
CGFloat(DifferenceOfGaussians.gaussian(CGFloat($0), sigma: sigma))
}
@@ -914,23 +914,23 @@ class DifferenceOfGaussians: CIFilter
count: weightsArray.count).normalize()
let horizontalBluredImage = CIFilter(name: "CIConvolution9Horizontal",
- withInputParameters: [
+ parameters: [
kCIInputWeightsKey: weightsVector,
kCIInputImageKey: image])!.outputImage!
let verticalBlurredImage = CIFilter(name: "CIConvolution9Vertical",
- withInputParameters: [
+ parameters: [
kCIInputWeightsKey: weightsVector,
kCIInputImageKey: horizontalBluredImage])!.outputImage!
return verticalBlurredImage
}
- static func gaussian(x: CGFloat, sigma: CGFloat) -> CGFloat
+ static func gaussian(_ x: CGFloat, sigma: CGFloat) -> CGFloat
{
let variance = max(sigma * sigma, 0.00001)
- return (1.0 / sqrt(CGFloat(M_PI) * 2 * variance)) * pow(CGFloat(M_E), -pow(x, 2) / (2 * variance))
+ return (1.0 / sqrt(CGFloat.pi * 2 * variance)) * pow(CGFloat(M_E), -pow(x, 2) / (2 * variance))
}
}
@@ -938,19 +938,19 @@ class DifferenceOfGaussians: CIFilter
class StarBurstFilter: CIFilter
{
- var inputImage : CIImage?
- var inputThreshold: CGFloat = 0.9
- var inputRadius: CGFloat = 20
- var inputAngle: CGFloat = 0
- var inputBeamCount: Int = 3
- var inputStarburstBrightness: CGFloat = 0
+ @objc var inputImage : CIImage?
+ @objc var inputThreshold: CGFloat = 0.9
+ @objc var inputRadius: CGFloat = 20
+ @objc var inputAngle: CGFloat = 0
+ @objc var inputBeamCount: Int = 3
+ @objc var inputStarburstBrightness: CGFloat = 0
let thresholdFilter = ThresholdToAlphaFilter()
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Starburst Filter",
+ kCIAttributeFilterDisplayName: "Starburst Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -980,7 +980,7 @@ class StarBurstFilter: CIFilter
kCIAttributeDisplayName: "Angle",
kCIAttributeMin: 0,
kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: M_PI,
+ kCIAttributeSliderMax: Double.pi,
kCIAttributeType: kCIAttributeTypeScalar],
"inputStarburstBrightness": [kCIAttributeIdentity: 0,
@@ -1016,30 +1016,30 @@ class StarBurstFilter: CIFilter
let thresholdImage = thresholdFilter.outputImage!
let starBurstAccumulator = CIImageAccumulator(extent: thresholdImage.extent,
- format: kCIFormatARGB8)
+ format: CIFormat.ARGB8)
for i in 0 ..< inputBeamCount
{
- let angle = CGFloat((M_PI / Double(inputBeamCount)) * Double(i))
+ let angle = CGFloat(Double.pi / Double(inputBeamCount) * Double(i))
- let starburst = thresholdImage.imageByApplyingFilter("CIMotionBlur",
- withInputParameters: [
+ let starburst = thresholdImage.applyingFilter("CIMotionBlur",
+ parameters: [
kCIInputRadiusKey: inputRadius,
kCIInputAngleKey: inputAngle + angle])
- .imageByCroppingToRect(thresholdImage.extent)
- .imageByApplyingFilter("CIAdditionCompositing",
- withInputParameters: [
- kCIInputBackgroundImageKey: starBurstAccumulator.image()])
+ .cropped(to: thresholdImage.extent)
+ .applyingFilter("CIAdditionCompositing",
+ parameters: [
+ kCIInputBackgroundImageKey: starBurstAccumulator!.image()])
- starBurstAccumulator.setImage(starburst)
+ starBurstAccumulator?.setImage(starburst)
}
- let adjustedStarBurst = starBurstAccumulator.image()
- .imageByApplyingFilter("CIColorControls",
- withInputParameters: [kCIInputBrightnessKey: inputStarburstBrightness])
+ let adjustedStarBurst = starBurstAccumulator?.image()
+ .applyingFilter("CIColorControls",
+ parameters: [kCIInputBrightnessKey: inputStarburstBrightness])
- let final = inputImage.imageByApplyingFilter("CIAdditionCompositing",
- withInputParameters: [kCIInputBackgroundImageKey: adjustedStarBurst])
+ let final = inputImage.applyingFilter("CIAdditionCompositing",
+ parameters: [kCIInputBackgroundImageKey: adjustedStarBurst!])
return final
}
@@ -1050,11 +1050,11 @@ class StarBurstFilter: CIFilter
class ThresholdToAlphaFilter: ThresholdFilter
{
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
var superAttributes = super.attributes
- superAttributes[kCIAttributeFilterDisplayName] = "Threshold To Alpha Filter"
+ superAttributes[kCIAttributeFilterDisplayName] = "Threshold To Alpha Filter" as AnyObject
return superAttributes
}
@@ -1063,7 +1063,7 @@ class ThresholdToAlphaFilter: ThresholdFilter
{
super.init()
- thresholdKernel = CIColorKernel(string:
+ thresholdKernel = CIColorKernel(source:
"kernel vec4 thresholdFilter(__sample image, float threshold)" +
"{" +
" float luma = dot(image.rgb, vec3(0.2126, 0.7152, 0.0722));" +
@@ -1083,17 +1083,17 @@ class ThresholdToAlphaFilter: ThresholdFilter
class AdvancedMonochrome: CIFilter
{
- var inputImage : CIImage?
+ @objc var inputImage : CIImage?
- var inputRedBalance: CGFloat = 1
- var inputGreenBalance: CGFloat = 1
- var inputBlueBalance: CGFloat = 1
- var inputClamp: CGFloat = 0
+ @objc var inputRedBalance: CGFloat = 1
+ @objc var inputGreenBalance: CGFloat = 1
+ @objc var inputBlueBalance: CGFloat = 1
+ @objc var inputClamp: CGFloat = 0
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Advanced Monochrome",
+ kCIAttributeFilterDisplayName: "Advanced Monochrome" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -1133,7 +1133,7 @@ class AdvancedMonochrome: CIFilter
]
}
- let kernel = CIColorKernel(string:
+ let kernel = CIColorKernel(source:
"kernel vec4 advancedMonochrome(__sample pixel, float redBalance, float greenBalance, float blueBalance, float clamp)" +
"{" +
" float scale = 1.0 / (redBalance + greenBalance + blueBalance);" +
@@ -1152,15 +1152,15 @@ class AdvancedMonochrome: CIFilter
override var outputImage: CIImage!
{
guard let inputImage = inputImage,
- kernel = kernel else
+ let kernel = kernel else
{
return nil
}
let extent = inputImage.extent
- let arguments = [inputImage, inputRedBalance, inputGreenBalance, inputBlueBalance, inputClamp]
+ let arguments = [inputImage, inputRedBalance, inputGreenBalance, inputBlueBalance, inputClamp] as [Any]
- return kernel.applyWithExtent(extent, arguments: arguments)
+ return kernel.apply(extent: extent, arguments: arguments)
}
}
@@ -1168,14 +1168,14 @@ class AdvancedMonochrome: CIFilter
class SmoothThreshold: CIFilter
{
- var inputImage : CIImage?
- var inputEdgeO: CGFloat = 0.25
- var inputEdge1: CGFloat = 0.75
+ @objc var inputImage : CIImage?
+ @objc var inputEdgeO: CGFloat = 0.25
+ @objc var inputEdge1: CGFloat = 0.75
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Smooth Threshold Filter",
+ kCIAttributeFilterDisplayName: "Smooth Threshold Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -1199,7 +1199,7 @@ class SmoothThreshold: CIFilter
]
}
- let colorKernel = CIColorKernel(string:
+ let colorKernel = CIColorKernel(source:
"kernel vec4 color(__sample pixel, float inputEdgeO, float inputEdge1)" +
"{" +
" float luma = dot(pixel.rgb, vec3(0.2126, 0.7152, 0.0722));" +
@@ -1211,7 +1211,7 @@ class SmoothThreshold: CIFilter
override var outputImage: CIImage!
{
guard let inputImage = inputImage,
- colorKernel = colorKernel else
+ let colorKernel = colorKernel else
{
return nil
}
@@ -1219,9 +1219,9 @@ class SmoothThreshold: CIFilter
let extent = inputImage.extent
let arguments = [inputImage,
min(inputEdgeO, inputEdge1),
- max(inputEdgeO, inputEdge1),]
+ max(inputEdgeO, inputEdge1),] as [Any]
- return colorKernel.applyWithExtent(extent,
+ return colorKernel.apply(extent: extent,
arguments: arguments)
}
}
@@ -1230,13 +1230,13 @@ class SmoothThreshold: CIFilter
class ThresholdFilter: CIFilter
{
- var inputImage : CIImage?
- var inputThreshold: CGFloat = 0.75
+ @objc var inputImage : CIImage?
+ @objc var inputThreshold: CGFloat = 0.75
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Threshold Filter",
+ kCIAttributeFilterDisplayName: "Threshold Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -1261,7 +1261,7 @@ class ThresholdFilter: CIFilter
{
super.init()
- thresholdKernel = CIColorKernel(string:
+ thresholdKernel = CIColorKernel(source:
"kernel vec4 thresholdFilter(__sample image, float threshold)" +
"{" +
" float luma = dot(image.rgb, vec3(0.2126, 0.7152, 0.0722));" +
@@ -1282,15 +1282,15 @@ class ThresholdFilter: CIFilter
override var outputImage: CIImage!
{
guard let inputImage = inputImage,
- thresholdKernel = thresholdKernel else
+ let thresholdKernel = thresholdKernel else
{
return nil
}
let extent = inputImage.extent
- let arguments = [inputImage, inputThreshold]
+ let arguments = [inputImage, inputThreshold] as [Any]
- return thresholdKernel.applyWithExtent(extent, arguments: arguments)
+ return thresholdKernel.apply(extent: extent, arguments: arguments)
}
}
@@ -1299,16 +1299,16 @@ class ThresholdFilter: CIFilter
// based on https://github.com/BradLarson/GPUImage/blob/master/framework/Source/GPUImagePolarPixellateFilter.m
class PolarPixellate: CIFilter
{
- var inputImage : CIImage?
- var inputCenter = CIVector(x: 320, y: 320)
+ @objc var inputImage : CIImage?
+ @objc var inputCenter = CIVector(x: 320, y: 320)
- var inputPixelArc = CGFloat(M_PI / 15)
- var inputPixelLength = CGFloat(50)
+ @objc var inputPixelArc = CGFloat.pi / 15
+ @objc var inputPixelLength = CGFloat(50)
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Polar Pixellate",
+ kCIAttributeFilterDisplayName: "Polar Pixellate" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -1316,11 +1316,11 @@ class PolarPixellate: CIFilter
"inputPixelArc": [kCIAttributeIdentity: 0,
kCIAttributeClass: "NSNumber",
- kCIAttributeDefault: CGFloat(M_PI / 15),
+ kCIAttributeDefault: CGFloat.pi / 15,
kCIAttributeDisplayName: "Pixel Arc",
kCIAttributeMin: 0,
kCIAttributeSliderMin: 0,
- kCIAttributeSliderMax: CGFloat(M_PI),
+ kCIAttributeSliderMax: CGFloat.pi,
kCIAttributeType: kCIAttributeTypeScalar],
"inputPixelLength": [kCIAttributeIdentity: 0,
@@ -1342,12 +1342,12 @@ class PolarPixellate: CIFilter
override func setDefaults()
{
- inputPixelArc = CGFloat(M_PI / 15)
+ inputPixelArc = CGFloat.pi / 15
inputPixelLength = 50
inputCenter = CIVector(x: 320, y: 320)
}
- let warpKernel = CIWarpKernel(string:
+ let warpKernel = CIWarpKernel(source:
"kernel vec2 polarPixellate(vec2 center, vec2 pixelSize)" +
"{" +
" vec2 normCoord = 2.0 * destCoord() - 1.0;" +
@@ -1366,18 +1366,18 @@ class PolarPixellate: CIFilter
override var outputImage : CIImage!
{
- if let inputImage = inputImage, kernel = warpKernel
+ if let inputImage = inputImage, let kernel = warpKernel
{
let extent = inputImage.extent
let pixelSize = CIVector(x: inputPixelLength, y: inputPixelArc)
- return kernel.applyWithExtent(extent,
+ return kernel.apply(extent: extent,
roiCallback:
{
(index, rect) in
return rect
},
- inputImage: inputImage,
+ image: inputImage,
arguments: [inputCenter, pixelSize])
}
return nil
@@ -1388,15 +1388,15 @@ class PolarPixellate: CIFilter
class VignetteNoirFilter: CIFilter
{
- var inputImage: CIImage?
- var inputRadius: CGFloat = 1
- var inputIntensity: CGFloat = 2
- var inputEdgeBrightness: CGFloat = -0.3
+ @objc var inputImage: CIImage?
+ @objc var inputRadius: CGFloat = 1
+ @objc var inputIntensity: CGFloat = 2
+ @objc var inputEdgeBrightness: CGFloat = -0.3
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Vignette Noir Filter",
+ kCIAttributeFilterDisplayName: "Vignette Noir Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -1443,17 +1443,17 @@ class VignetteNoirFilter: CIFilter
}
let mask = CIImage(color: CIColor(red: 1, green: 1, blue: 1))
- .imageByCroppingToRect(inputImage.extent)
- .imageByApplyingFilter("CIVignette", withInputParameters: [
+ .cropped(to: inputImage.extent)
+ .applyingFilter("CIVignette", parameters: [
kCIInputRadiusKey: inputRadius,
kCIInputIntensityKey: inputIntensity])
let noir = inputImage
- .imageByApplyingFilter("CIPhotoEffectNoir",withInputParameters: nil)
- .imageByApplyingFilter("CIColorControls", withInputParameters: [
+ .applyingFilter("CIPhotoEffectNoir",parameters: [:])
+ .applyingFilter("CIColorControls", parameters: [
kCIInputBrightnessKey: inputEdgeBrightness])
- let blendWithMaskFilter = CIFilter(name: "CIBlendWithMask", withInputParameters: [
+ let blendWithMaskFilter = CIFilter(name: "CIBlendWithMask", parameters: [
kCIInputImageKey: inputImage,
kCIInputBackgroundImageKey: noir,
kCIInputMaskImageKey: mask])
@@ -1467,13 +1467,13 @@ class VignetteNoirFilter: CIFilter
/// NormalMapFilter - converts a bump map to a normal map
class NormalMapFilter: CIFilter
{
- var inputImage: CIImage?
- var inputContrast = CGFloat(2)
+ @objc var inputImage: CIImage?
+ @objc var inputContrast = CGFloat(2)
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Normal Map",
+ kCIAttributeFilterDisplayName: "Normal Map" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -1491,7 +1491,7 @@ class NormalMapFilter: CIFilter
]
}
- let normalMapKernel = CIKernel(string:
+ let normalMapKernel = CIKernel(source:
"float lumaAtOffset(sampler source, vec2 origin, vec2 offset)" +
"{" +
" vec3 pixel = sample(source, samplerTransform(source, origin + offset)).rgb;" +
@@ -1520,19 +1520,19 @@ class NormalMapFilter: CIFilter
override var outputImage: CIImage?
{
guard let inputImage = inputImage,
- normalMapKernel = normalMapKernel else
+ let normalMapKernel = normalMapKernel else
{
return nil
}
- return normalMapKernel.applyWithExtent(inputImage.extent,
+ return normalMapKernel.apply(extent: inputImage.extent,
roiCallback:
{
(index, rect) in
return rect
},
arguments: [inputImage])?
- .imageByApplyingFilter("CIColorControls", withInputParameters: [kCIInputContrastKey: inputContrast])
+ .applyingFilter("CIColorControls", parameters: [kCIInputContrastKey: inputContrast])
}
}
diff --git a/Filterpedia/customFilters/DitherBayer.cikernel b/Filterpedia/customFilters/DitherBayer.cikernel
old mode 100644
new mode 100755
index a433945..8f1c240
--- a/Filterpedia/customFilters/DitherBayer.cikernel
+++ b/Filterpedia/customFilters/DitherBayer.cikernel
@@ -490,7 +490,7 @@ float orderedDither8x8(float colorin, float bx, float by, float errorIntensity)
return colorin * (error * 2.0 * errorIntensity + (1.0 - errorIntensity));
}
-kernel vec4 ditherBayer(__sample image, float intensity, float matrix, float palette)
+kernel vec4 ditherBayer(sampler image, float intensity, float matrix, float palette)
{
vec4 pixel = sample(image, samplerCoord(image));
int msize = int(matrix);
diff --git a/Filterpedia/customFilters/EightBit.swift b/Filterpedia/customFilters/EightBit.swift
old mode 100644
new mode 100755
index 7e36874..2b397bd
--- a/Filterpedia/customFilters/EightBit.swift
+++ b/Filterpedia/customFilters/EightBit.swift
@@ -22,9 +22,9 @@ import CoreImage
class EightBit: CIFilter
{
- var inputImage: CIImage?
- var inputPaletteIndex: CGFloat = 4
- var inputScale: CGFloat = 8
+ @objc var inputImage: CIImage?
+ @objc var inputPaletteIndex: CGFloat = 4
+ @objc var inputScale: CGFloat = 8
override func setDefaults()
{
@@ -32,10 +32,10 @@ class EightBit: CIFilter
inputScale = 8
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Eight Bit",
+ kCIAttributeFilterDisplayName: "Eight Bit" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -76,7 +76,6 @@ class EightBit: CIFilter
var kernelString = "kernel vec4 thresholdFilter(__sample image)"
kernelString += "{ \n"
- kernelString += " vec2 uv = samplerCoord(image); \n"
kernelString += " float dist = distance(image.rgb, \(palette.first!.toVectorString())); \n"
kernelString += " vec3 returnColor = \(palette.first!.toVectorString());\n "
@@ -92,7 +91,7 @@ class EightBit: CIFilter
kernelString += " return vec4(returnColor, 1.0) ; \n"
kernelString += "} \n"
- guard let kernel = CIColorKernel(string: kernelString) else
+ guard let kernel = CIColorKernel(source: kernelString) else
{
return nil
}
@@ -100,8 +99,8 @@ class EightBit: CIFilter
let extent = inputImage.extent
- let final = kernel.applyWithExtent(extent,
- arguments: [inputImage.imageByApplyingFilter("CIPixellate", withInputParameters: [kCIInputScaleKey: inputScale])])
+ let final = kernel.apply(extent: extent,
+ arguments: [inputImage.applyingFilter("CIPixellate", parameters: [kCIInputScaleKey: inputScale])])
return final
}
diff --git a/Filterpedia/customFilters/FilmicEffects.swift b/Filterpedia/customFilters/FilmicEffects.swift
old mode 100644
new mode 100755
index 9a26a1d..fa57d22
--- a/Filterpedia/customFilters/FilmicEffects.swift
+++ b/Filterpedia/customFilters/FilmicEffects.swift
@@ -26,13 +26,13 @@ import CoreImage
class BleachBypassFilter: CIFilter
{
- var inputImage : CIImage?
- var inputAmount = CGFloat(1)
+ @objc var inputImage : CIImage?
+ @objc var inputAmount = CGFloat(1)
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Bleach Bypass Filter",
+ kCIAttributeFilterDisplayName: "Bleach Bypass Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -55,7 +55,7 @@ class BleachBypassFilter: CIFilter
inputAmount = 1
}
- let bleachBypassKernel = CIColorKernel(string:
+ let bleachBypassKernel = CIColorKernel(source:
"kernel vec4 bleachBypassFilter(__sample image, float amount) \n" +
"{ \n" +
" float luma = dot(image.rgb, vec3(0.2126, 0.7152, 0.0722));" +
@@ -72,15 +72,15 @@ class BleachBypassFilter: CIFilter
override var outputImage: CIImage!
{
guard let inputImage = inputImage,
- bleachBypassKernel = bleachBypassKernel else
+ let bleachBypassKernel = bleachBypassKernel else
{
return nil
}
let extent = inputImage.extent
- let arguments = [inputImage, inputAmount]
+ let arguments = [inputImage, inputAmount] as [Any]
- return bleachBypassKernel.applyWithExtent(extent, arguments: arguments)
+ return bleachBypassKernel.apply(extent: extent, arguments: arguments)
}
}
@@ -89,13 +89,13 @@ class BleachBypassFilter: CIFilter
class TechnicolorFilter: CIFilter
{
- var inputImage : CIImage?
- var inputAmount = CGFloat(1)
+ @objc var inputImage : CIImage?
+ @objc var inputAmount = CGFloat(1)
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Technicolor Filter",
+ kCIAttributeFilterDisplayName: "Technicolor Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -118,7 +118,7 @@ class TechnicolorFilter: CIFilter
inputAmount = 1
}
- let technicolorKernel = CIColorKernel(string:
+ let technicolorKernel = CIColorKernel(source:
"kernel vec4 technicolorFilter(__sample image, float amount)" +
"{" +
" vec3 redmatte = 1.0 - vec3(image.r - ((image.g + image.b)/2.0));" +
@@ -136,14 +136,14 @@ class TechnicolorFilter: CIFilter
override var outputImage: CIImage!
{
guard let inputImage = inputImage,
- technicolorKernel = technicolorKernel else
+ let technicolorKernel = technicolorKernel else
{
return nil
}
let extent = inputImage.extent
- let arguments = [inputImage, inputAmount]
+ let arguments = [inputImage, inputAmount] as [Any]
- return technicolorKernel.applyWithExtent(extent, arguments: arguments)
+ return technicolorKernel.apply(extent: extent, arguments: arguments)
}
}
diff --git a/Filterpedia/customFilters/Flame.swift b/Filterpedia/customFilters/Flame.swift
old mode 100644
new mode 100755
index 0afea98..c1e778e
--- a/Filterpedia/customFilters/Flame.swift
+++ b/Filterpedia/customFilters/Flame.swift
@@ -11,29 +11,29 @@ import CoreImage
class Flame: CIFilter
{
- var inputTime: CGFloat = 1
+ @objc var inputTime: CGFloat = 1
- var inputIterations: CGFloat = 5
- var inputAnisotropy: CGFloat = 4 // 1.0 = fat, default = 5, 10.0 = thin
- var inputEdgeDefinition: CGFloat = 20.0; // 5.0 = soft, 16.0 = default, 100 = sharp
- var inputHotspotExponent: CGFloat = 4.0; // 1.0 - cold, 4.0 - default, 10 = hotspots!
- var inputDensity: CGFloat = 1.0; // 0.5 -> 2.0 default 1.0
- var inputStrength: CGFloat = 2.0; // 1.0 -> 5.0 default 2.0
+ @objc var inputIterations: CGFloat = 5
+ @objc var inputAnisotropy: CGFloat = 4 // 1.0 = fat, default = 5, 10.0 = thin
+ @objc var inputEdgeDefinition: CGFloat = 20.0; // 5.0 = soft, 16.0 = default, 100 = sharp
+ @objc var inputHotspotExponent: CGFloat = 4.0; // 1.0 - cold, 4.0 - default, 10 = hotspots!
+ @objc var inputDensity: CGFloat = 1.0; // 0.5 -> 2.0 default 1.0
+ @objc var inputStrength: CGFloat = 2.0; // 1.0 -> 5.0 default 2.0
- var inputRedMultiplier: CGFloat = 1.5;
- var inputRedExponent: CGFloat = 1.0;
- var inputGreenMultiplier: CGFloat = 1.5;
- var inputGreenExponent: CGFloat = 3.0;
- var inputBlueMultiplier: CGFloat = 0.5;
- var inputBlueExponent: CGFloat = 2.0;
+ @objc var inputRedMultiplier: CGFloat = 1.5;
+ @objc var inputRedExponent: CGFloat = 1.0;
+ @objc var inputGreenMultiplier: CGFloat = 1.5;
+ @objc var inputGreenExponent: CGFloat = 3.0;
+ @objc var inputBlueMultiplier: CGFloat = 0.5;
+ @objc var inputBlueExponent: CGFloat = 2.0;
- var inputWidth: CGFloat = 640
- var inputHeight: CGFloat = 640
+ @objc var inputWidth: CGFloat = 640
+ @objc var inputHeight: CGFloat = 640
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Flame",
+ kCIAttributeFilterDisplayName: "Flame" as AnyObject,
"inputTime": [kCIAttributeIdentity: 0,
kCIAttributeClass: "NSNumber",
@@ -157,11 +157,11 @@ class Flame: CIFilter
let flameKernel: CIColorKernel =
{
- let shaderPath = NSBundle.mainBundle().pathForResource("flame", ofType: "cikernel")
+ let shaderPath = Bundle.main.path(forResource: "flame", ofType: "cikernel")
guard let path = shaderPath,
- code = try? String(contentsOfFile: path),
- kernel = CIColorKernel(string: code) else
+ let code = try? String(contentsOfFile: path),
+ let kernel = CIColorKernel(source: code) else
{
fatalError("Unable to build Flame shader")
}
@@ -177,10 +177,10 @@ class Flame: CIFilter
inputRedMultiplier, inputRedExponent,
inputGreenMultiplier, inputGreenExponent,
inputBlueMultiplier, inputBlueExponent,
- inputStrength]
+ inputStrength] as [Any]
- return flameKernel.applyWithExtent(
- CGRect(origin: CGPointZero, size: CGSize(width: inputWidth, height: inputHeight)),
+ return flameKernel.apply(
+ extent: CGRect(origin: CGPoint.zero, size: CGSize(width: inputWidth, height: inputHeight)),
arguments: arguments)
}
diff --git a/Filterpedia/customFilters/KuwaharaFilter.swift b/Filterpedia/customFilters/KuwaharaFilter.swift
old mode 100644
new mode 100755
index da943b2..ee8ea41
--- a/Filterpedia/customFilters/KuwaharaFilter.swift
+++ b/Filterpedia/customFilters/KuwaharaFilter.swift
@@ -22,13 +22,13 @@ import CoreImage
class KuwaharaFilter: CIFilter
{
- var inputImage: CIImage?
- var inputRadius: CGFloat = 15
+ @objc var inputImage: CIImage?
+ @objc var inputRadius: CGFloat = 15
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Kuwahara Filter",
+ kCIAttributeFilterDisplayName: "Kuwahara Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -51,7 +51,7 @@ class KuwaharaFilter: CIFilter
inputRadius = 15
}
- let kuwaharaKernel = CIKernel(string:
+ let kuwaharaKernel = CIKernel(source:
"kernel vec4 kuwahara(sampler image, float r) \n" +
"{" +
" vec2 d = destCoord();" +
@@ -114,12 +114,12 @@ class KuwaharaFilter: CIFilter
override var outputImage : CIImage!
{
if let inputImage = inputImage,
- kuwaharaKernel = kuwaharaKernel
+ let kuwaharaKernel = kuwaharaKernel
{
- let arguments = [inputImage, inputRadius]
+ let arguments = [inputImage, inputRadius] as [Any]
let extent = inputImage.extent
- return kuwaharaKernel.applyWithExtent(extent,
+ return kuwaharaKernel.apply(extent: extent,
roiCallback:
{
(index, rect) in
diff --git a/Filterpedia/customFilters/LensFlare.swift b/Filterpedia/customFilters/LensFlare.swift
old mode 100644
new mode 100755
index eb8f8f4..5ac50b7
--- a/Filterpedia/customFilters/LensFlare.swift
+++ b/Filterpedia/customFilters/LensFlare.swift
@@ -24,32 +24,32 @@ import CoreImage
class LensFlare: CIFilter
{
- var inputOrigin = CIVector(x: 150, y: 150)
- var inputSize = CIVector(x: 640, y: 640)
+ @objc var inputOrigin = CIVector(x: 150, y: 150)
+ @objc var inputSize = CIVector(x: 640, y: 640)
- var inputColor = CIVector(x: 0.5, y: 0.2, z: 0.3)
- var inputReflectionBrightness: CGFloat = 0.25
+ @objc var inputColor = CIVector(x: 0.5, y: 0.2, z: 0.3)
+ @objc var inputReflectionBrightness: CGFloat = 0.25
- var inputPositionOne: CGFloat = 0.15
- var inputPositionTwo: CGFloat = 0.3
- var inputPositionThree: CGFloat = 0.4
- var inputPositionFour: CGFloat = 0.45
- var inputPositionFive: CGFloat = 0.6
- var inputPositionSix: CGFloat = 0.75
- var inputPositionSeven: CGFloat = 0.8
+ @objc var inputPositionOne: CGFloat = 0.15
+ @objc var inputPositionTwo: CGFloat = 0.3
+ @objc var inputPositionThree: CGFloat = 0.4
+ @objc var inputPositionFour: CGFloat = 0.45
+ @objc var inputPositionFive: CGFloat = 0.6
+ @objc var inputPositionSix: CGFloat = 0.75
+ @objc var inputPositionSeven: CGFloat = 0.8
- var inputReflectionSizeZero: CGFloat = 20
- var inputReflectionSizeOne: CGFloat = 25
- var inputReflectionSizeTwo: CGFloat = 12.5
- var inputReflectionSizeThree: CGFloat = 5
- var inputReflectionSizeFour: CGFloat = 20
- var inputReflectionSizeFive: CGFloat = 35
- var inputReflectionSizeSix: CGFloat = 40
- var inputReflectionSizeSeven: CGFloat = 20
+ @objc var inputReflectionSizeZero: CGFloat = 20
+ @objc var inputReflectionSizeOne: CGFloat = 25
+ @objc var inputReflectionSizeTwo: CGFloat = 12.5
+ @objc var inputReflectionSizeThree: CGFloat = 5
+ @objc var inputReflectionSizeFour: CGFloat = 20
+ @objc var inputReflectionSizeFive: CGFloat = 35
+ @objc var inputReflectionSizeSix: CGFloat = 40
+ @objc var inputReflectionSizeSeven: CGFloat = 20
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
- let positions: [String : AnyObject] = [
+ let positions: [String : Any] = [
"inputPositionOne": [kCIAttributeIdentity: 0,
kCIAttributeClass: "NSNumber",
kCIAttributeDefault: 0.15,
@@ -114,7 +114,7 @@ class LensFlare: CIFilter
kCIAttributeType: kCIAttributeTypeScalar],
]
- let sizes: [String : AnyObject] = [
+ let sizes: [String : Any] = [
"inputReflectionSizeZero": [kCIAttributeIdentity: 0,
kCIAttributeClass: "NSNumber",
kCIAttributeDefault: 20,
@@ -194,7 +194,7 @@ class LensFlare: CIFilter
kCIAttributeType: kCIAttributeTypeOffset]
]
- let attributes: [String : AnyObject] = [
+ let attributes: [String : Any] = [
kCIAttributeFilterDisplayName: "Lens Flare",
"inputOrigin": [kCIAttributeIdentity: 0,
@@ -223,9 +223,9 @@ class LensFlare: CIFilter
}
- let sunbeamsFilter = CIFilter(name: "CISunbeamsGenerator", withInputParameters: ["inputStriationStrength": 0])
+ let sunbeamsFilter = CIFilter(name: "CISunbeamsGenerator", parameters: ["inputStriationStrength": 0])
- var colorKernel = CIColorKernel(string:
+ var colorKernel = CIColorKernel(source:
"float brightnessWithinHexagon(vec2 coord, vec2 center, float v)" +
"{" +
" float h = v * sqrt(3.0);" +
@@ -261,11 +261,11 @@ class LensFlare: CIFilter
return nil
}
- let extent = CGRect(x: 0, y: 0, width: inputSize.X, height: inputSize.Y)
- let center = CIVector(x: inputSize.X / 2, y: inputSize.Y / 2)
+ let extent = CGRect(x: 0, y: 0, width: inputSize.x, height: inputSize.y)
+ let center = CIVector(x: inputSize.x / 2, y: inputSize.y / 2)
- let localOrigin = CIVector(x: center.X - inputOrigin.X, y: center.Y - inputOrigin.Y)
- let reflectionZero = CIVector(x: center.X + localOrigin.X, y: center.Y + localOrigin.Y)
+ let localOrigin = CIVector(x: center.x - inputOrigin.x, y: center.y - inputOrigin.y)
+ let reflectionZero = CIVector(x: center.x + localOrigin.x, y: center.y + localOrigin.y)
let reflectionOne = inputOrigin.interpolateTo(reflectionZero, value: inputPositionOne)
let reflectionTwo = inputOrigin.interpolateTo(reflectionZero, value: inputPositionTwo)
@@ -284,15 +284,15 @@ class LensFlare: CIFilter
reflectionZero, reflectionOne, reflectionTwo, reflectionThree, reflectionFour, reflectionFive, reflectionSix, reflectionSeven,
inputReflectionSizeZero, inputReflectionSizeOne, inputReflectionSizeTwo, inputReflectionSizeThree, inputReflectionSizeFour,
inputReflectionSizeFive, inputReflectionSizeSix, inputReflectionSizeSeven,
- inputColor, inputReflectionBrightness]
+ inputColor, inputReflectionBrightness] as [Any]
- let lensFlareImage = colorKernel.applyWithExtent(
- extent,
- arguments: arguments)?.imageByApplyingFilter("CIGaussianBlur", withInputParameters: [kCIInputRadiusKey: 2])
+ let lensFlareImage = colorKernel.apply(
+ extent: extent,
+ arguments: arguments)?.applyingFilter("CIGaussianBlur", parameters: [kCIInputRadiusKey: 2])
- return lensFlareImage?.imageByApplyingFilter(
+ return lensFlareImage?.applyingFilter(
"CIAdditionCompositing",
- withInputParameters: [kCIInputBackgroundImageKey: sunbeamsImage]).imageByCroppingToRect(extent)
+ parameters: [kCIInputBackgroundImageKey: sunbeamsImage]).cropped(to: extent)
}
}
diff --git a/Filterpedia/customFilters/MercurializeFilter.swift b/Filterpedia/customFilters/MercurializeFilter.swift
old mode 100644
new mode 100755
index 51732f3..7d62f62
--- a/Filterpedia/customFilters/MercurializeFilter.swift
+++ b/Filterpedia/customFilters/MercurializeFilter.swift
@@ -25,15 +25,15 @@ class MercurializeFilter: CIFilter
{
// MARK: Filter parameters
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- var inputEdgeThickness: CGFloat = 5
+ @objc var inputEdgeThickness: CGFloat = 5
- var inputScale: CGFloat = 10
+ @objc var inputScale: CGFloat = 10
// MARK: Shading image attributes
- var inputLightColor = CIColor(red: 1, green: 1, blue: 0.75)
+ @objc var inputLightColor = CIColor(red: 1, green: 1, blue: 0.75)
{
didSet
{
@@ -41,7 +41,7 @@ class MercurializeFilter: CIFilter
}
}
- var inputLightPosition = CIVector(x: 0, y: 1)
+ @objc var inputLightPosition = CIVector(x: 0, y: 1)
{
didSet
{
@@ -49,7 +49,7 @@ class MercurializeFilter: CIFilter
}
}
- var inputAmbientLightColor = CIColor(red: 0.5, green: 0.5, blue: 0.75)
+ @objc var inputAmbientLightColor = CIColor(red: 0.5, green: 0.5, blue: 0.75)
{
didSet
{
@@ -57,7 +57,7 @@ class MercurializeFilter: CIFilter
}
}
- var inputShininess: CGFloat = 0.05
+ @objc var inputShininess: CGFloat = 0.05
{
didSet
{
@@ -88,10 +88,10 @@ class MercurializeFilter: CIFilter
inputScale = 10
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Mercurialize Filter",
+ kCIAttributeFilterDisplayName: "Mercurialize Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -174,27 +174,27 @@ class MercurializeFilter: CIFilter
material.shininess = inputShininess
omniLightNode.color = inputLightColor
- omniLightNode.position.x = Float(-50 + (inputLightPosition.X * 100))
- omniLightNode.position.y = Float(-50 + (inputLightPosition.Y * 100))
+ omniLightNode.position.x = Float(-50 + (inputLightPosition.x * 100))
+ omniLightNode.position.y = Float(-50 + (inputLightPosition.y * 100))
ambientLightNode.color = inputAmbientLightColor
- sceneKitView.prepareObject(sceneKitView.scene!, shouldAbortBlock: {false})
+ sceneKitView.prepare(sceneKitView.scene!, shouldAbortBlock: {false})
sphereImage = CIImage(image: sceneKitView.snapshot())
}
let edgeWork = CIFilter(name: "CIEdgeWork",
- withInputParameters: [kCIInputImageKey: inputImage,
+ parameters: [kCIInputImageKey: inputImage,
kCIInputRadiusKey: inputEdgeThickness])!
let heightField = CIFilter(name: "CIHeightFieldFromMask",
- withInputParameters: [
+ parameters: [
kCIInputRadiusKey: inputScale,
kCIInputImageKey: edgeWork.outputImage!])!
let shadedMaterial = CIFilter(name: "CIShadedMaterial",
- withInputParameters: [
+ parameters: [
kCIInputScaleKey: inputScale,
kCIInputImageKey: heightField.outputImage!,
kCIInputShadingImageKey: sphereImage!])!
@@ -208,7 +208,7 @@ class MercurializeFilter: CIFilter
{
sceneKitView.frame = CGRect(x: 0, y: 0, width: 320, height: 320)
- sceneKitView.backgroundColor = UIColor.blackColor()
+ sceneKitView.backgroundColor = UIColor.black
let scene = SCNScene()
@@ -241,9 +241,9 @@ class MercurializeFilter: CIFilter
// Material
- material.lightingModelName = SCNLightingModelPhong
- material.specular.contents = UIColor.whiteColor()
- material.diffuse.contents = UIColor.darkGrayColor()
+ material.lightingModel = SCNMaterial.LightingModel.phong
+ material.specular.contents = UIColor.white
+ material.diffuse.contents = UIColor.darkGray
material.shininess = 0.15
sphere.materials = [material]
@@ -259,7 +259,7 @@ class LightNode: SCNNode
super.init()
light = SCNLight()
- light!.type = type.rawValue
+ light!.type = SCNLight.LightType(rawValue: type.rawValue)
}
required init?(coder aDecoder: NSCoder)
@@ -271,7 +271,7 @@ class LightNode: SCNNode
{
didSet
{
- light?.color = UIColor(CIColor: color)
+ light?.color = UIColor(ciColor: color)
}
}
}
diff --git a/Filterpedia/customFilters/ModelIOGenerators.swift b/Filterpedia/customFilters/ModelIOGenerators.swift
old mode 100644
new mode 100755
index b39be29..a32648b
--- a/Filterpedia/customFilters/ModelIOGenerators.swift
+++ b/Filterpedia/customFilters/ModelIOGenerators.swift
@@ -14,8 +14,8 @@ import CoreImage
class ModelIOColorFromTemperature: CIFilter
{
- var inputSize = CIVector(x: 640, y: 640)
- var inputTemperature: CGFloat = 1700
+ @objc var inputSize = CIVector(x: 640, y: 640)
+ @objc var inputTemperature: CGFloat = 1700
override var outputImage: CIImage!
{
@@ -23,17 +23,17 @@ class ModelIOColorFromTemperature: CIFilter
colorTemperatureGradientFrom: inputTemperature.toFloat(),
toColorTemperature: inputTemperature.toFloat(),
name: "",
- textureDimensions: [Int32(inputSize.X), Int32(inputSize.Y)])
+ textureDimensions: [Int32(inputSize.x), Int32(inputSize.y)])
let swatchImage = swatch.imageFromTexture()!.takeRetainedValue()
- return CIImage(CGImage: swatchImage)
+ return CIImage(cgImage: swatchImage)
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "ModelIO Color From Temperature",
+ kCIAttributeFilterDisplayName: "ModelIO Color From Temperature" as AnyObject,
"inputSize": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIVector",
@@ -58,31 +58,31 @@ class ModelIOColorFromTemperature: CIFilter
class ModelIOColorScalarNoise: CIFilter
{
- var inputSize = CIVector(x: 640, y: 640)
- var inputSmoothness: CGFloat = 0.5
+ @objc var inputSize = CIVector(x: 640, y: 640)
+ @objc var inputSmoothness: CGFloat = 0.5
- let makeOpaqueKernel = CIColorKernel(string: "kernel vec4 xyz(__sample pixel) { return vec4(pixel.rgb, 1.0); }")
+ let makeOpaqueKernel = CIColorKernel(source: "kernel vec4 xyz(__sample pixel) { return vec4(pixel.rgb, 1.0); }")
override var outputImage: CIImage!
{
let noise = MDLNoiseTexture(scalarNoiseWithSmoothness: inputSmoothness.toFloat(),
name: "",
- textureDimensions: [Int32(inputSize.X), Int32(inputSize.Y)],
+ textureDimensions: [Int32(inputSize.x), Int32(inputSize.y)],
channelCount: 4,
- channelEncoding: MDLTextureChannelEncoding.UInt8,
+ channelEncoding: MDLTextureChannelEncoding.uInt8,
grayscale: false)
let noiseImage = noise.imageFromTexture()!.takeRetainedValue()
- let final = CIImage(CGImage: noiseImage)
+ let final = CIImage(cgImage: noiseImage)
- return makeOpaqueKernel?.applyWithExtent(final.extent, arguments: [final])
+ return makeOpaqueKernel?.apply(extent: final.extent, arguments: [final])
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "ModelIO Color Scalar Noise",
+ kCIAttributeFilterDisplayName: "ModelIO Color Scalar Noise" as AnyObject,
"inputSize": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIVector",
@@ -106,7 +106,7 @@ class ModelIOColorScalarNoise: CIFilter
class ModelIOSkyGenerator: CIFilter
{
- var inputSize = CIVector(x: 640, y: 640)
+ @objc var inputSize = CIVector(x: 640, y: 640)
{
didSet
{
@@ -114,13 +114,13 @@ class ModelIOSkyGenerator: CIFilter
}
}
- var inputTurbidity:CGFloat = 0.75
- var inputSunElevation: CGFloat = 0.70
- var inputUpperAtmosphereScattering: CGFloat = 0.2
- var inputGroundAlbedo: CGFloat = 0.5
- var inputContrast: CGFloat = 1
- var inputExposure: CGFloat = 0.5
- var inputSaturation: CGFloat = 0.0
+ @objc var inputTurbidity:CGFloat = 0.75
+ @objc var inputSunElevation: CGFloat = 0.70
+ @objc var inputUpperAtmosphereScattering: CGFloat = 0.2
+ @objc var inputGroundAlbedo: CGFloat = 0.5
+ @objc var inputContrast: CGFloat = 1
+ @objc var inputExposure: CGFloat = 0.5
+ @objc var inputSaturation: CGFloat = 0.0
var sky: MDLSkyCubeTexture?
@@ -136,8 +136,8 @@ class ModelIOSkyGenerator: CIFilter
else
{
sky = MDLSkyCubeTexture(name: nil,
- channelEncoding: MDLTextureChannelEncoding.UInt8,
- textureDimensions: [Int32(inputSize.X), Int32(inputSize.Y)],
+ channelEncoding: MDLTextureChannelEncoding.uInt8,
+ textureDimensions: [Int32(inputSize.x), Int32(inputSize.y)],
turbidity: inputTurbidity.toFloat(),
sunElevation: inputSunElevation.toFloat(),
upperAtmosphereScattering: inputUpperAtmosphereScattering.toFloat(),
@@ -148,19 +148,19 @@ class ModelIOSkyGenerator: CIFilter
sky!.exposure = inputExposure.toFloat()
sky!.saturation = inputSaturation.toFloat()
- sky!.updateTexture()
+ sky!.update()
let skyImage = sky!.imageFromTexture()!.takeRetainedValue()
- return CIImage(CGImage: skyImage)
- .imageByCroppingToRect(CGRect(x: 0, y: 0, width: inputSize.X, height: inputSize.Y))
+ return CIImage(cgImage: skyImage)
+ .cropped(to: CGRect(x: 0, y: 0, width: inputSize.x, height: inputSize.y))
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "ModelIO Sky Generator",
+ kCIAttributeFilterDisplayName: "ModelIO Sky Generator" as AnyObject,
"inputSize": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIVector",
diff --git a/Filterpedia/customFilters/MultiBandHSV.swift b/Filterpedia/customFilters/MultiBandHSV.swift
old mode 100644
new mode 100755
index 3ee103a..224319a
--- a/Filterpedia/customFilters/MultiBandHSV.swift
+++ b/Filterpedia/customFilters/MultiBandHSV.swift
@@ -79,24 +79,24 @@ class MultiBandHSV: CIFilter
shaderString += "return vec4(hsv2rgb(hsv), 1.0);"
shaderString += "}"
- return CIColorKernel(string: shaderString)!
+ return CIColorKernel(source: shaderString)!
}()
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- var inputRedShift = CIVector(x: 0, y: 1, z: 1)
- var inputOrangeShift = CIVector(x: 0, y: 1, z: 1)
- var inputYellowShift = CIVector(x: 0, y: 1, z: 1)
- var inputGreenShift = CIVector(x: 0, y: 1, z: 1)
- var inputAquaShift = CIVector(x: 0, y: 1, z: 1)
- var inputBlueShift = CIVector(x: 0, y: 1, z: 1)
- var inputPurpleShift = CIVector(x: 0, y: 1, z: 1)
- var inputMagentaShift = CIVector(x: 0, y: 1, z: 1)
+ @objc var inputRedShift = CIVector(x: 0, y: 1, z: 1)
+ @objc var inputOrangeShift = CIVector(x: 0, y: 1, z: 1)
+ @objc var inputYellowShift = CIVector(x: 0, y: 1, z: 1)
+ @objc var inputGreenShift = CIVector(x: 0, y: 1, z: 1)
+ @objc var inputAquaShift = CIVector(x: 0, y: 1, z: 1)
+ @objc var inputBlueShift = CIVector(x: 0, y: 1, z: 1)
+ @objc var inputPurpleShift = CIVector(x: 0, y: 1, z: 1)
+ @objc var inputMagentaShift = CIVector(x: 0, y: 1, z: 1)
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "MultiBandHSV",
+ kCIAttributeFilterDisplayName: "MultiBandHSV" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -168,7 +168,7 @@ class MultiBandHSV: CIFilter
return nil
}
- return multiBandHSVKernel.applyWithExtent(inputImage.extent,
+ return multiBandHSVKernel.apply(extent: inputImage.extent,
arguments: [inputImage,
inputRedShift,
inputOrangeShift,
diff --git a/Filterpedia/customFilters/RGBChannelCompositing.swift b/Filterpedia/customFilters/RGBChannelCompositing.swift
old mode 100644
new mode 100755
index 5eb5e85..e8a589d
--- a/Filterpedia/customFilters/RGBChannelCompositing.swift
+++ b/Filterpedia/customFilters/RGBChannelCompositing.swift
@@ -20,28 +20,28 @@
import CoreImage
-let tau = CGFloat(M_PI * 2)
+let tau = CGFloat.pi * 2
/// `RGBChannelCompositing` filter takes three input images and composites them together
/// by their color channels, the output RGB is `(inputRed.r, inputGreen.g, inputBlue.b)`
class RGBChannelCompositing: CIFilter
{
- var inputRedImage : CIImage?
- var inputGreenImage : CIImage?
- var inputBlueImage : CIImage?
+ @objc var inputRedImage : CIImage?
+ @objc var inputGreenImage : CIImage?
+ @objc var inputBlueImage : CIImage?
- let rgbChannelCompositingKernel = CIColorKernel(string:
+ let rgbChannelCompositingKernel = CIColorKernel(source:
"kernel vec4 rgbChannelCompositing(__sample red, __sample green, __sample blue)" +
"{" +
" return vec4(red.r, green.g, blue.b, 1.0);" +
"}"
)
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "RGB Compositing",
+ kCIAttributeFilterDisplayName: "RGB Compositing" as AnyObject,
"inputRedImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -63,9 +63,9 @@ class RGBChannelCompositing: CIFilter
override var outputImage: CIImage!
{
guard let inputRedImage = inputRedImage,
- inputGreenImage = inputGreenImage,
- inputBlueImage = inputBlueImage,
- rgbChannelCompositingKernel = rgbChannelCompositingKernel else
+ let inputGreenImage = inputGreenImage,
+ let inputBlueImage = inputBlueImage,
+ let rgbChannelCompositingKernel = rgbChannelCompositingKernel else
{
return nil
}
@@ -73,7 +73,7 @@ class RGBChannelCompositing: CIFilter
let extent = inputRedImage.extent.union(inputGreenImage.extent.union(inputBlueImage.extent))
let arguments = [inputRedImage, inputGreenImage, inputBlueImage]
- return rgbChannelCompositingKernel.applyWithExtent(extent, arguments: arguments)
+ return rgbChannelCompositingKernel.apply(extent: extent, arguments: arguments)
}
}
@@ -88,11 +88,11 @@ class RGBChannelCompositing: CIFilter
/// ```
class RGBChannelToneCurve: CIFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- var inputRedValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
- var inputGreenValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
- var inputBlueValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
+ @objc var inputRedValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
+ @objc var inputGreenValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
+ @objc var inputBlueValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
let rgbChannelCompositing = RGBChannelCompositing()
@@ -103,10 +103,10 @@ class RGBChannelToneCurve: CIFilter
inputBlueValues = CIVector(values: [0.0, 0.25, 0.5, 0.75, 1.0], count: 5)
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "RGB Tone Curve",
+ kCIAttributeFilterDisplayName: "RGB Tone Curve" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -143,31 +143,31 @@ class RGBChannelToneCurve: CIFilter
return nil
}
- let red = inputImage.imageByApplyingFilter("CIToneCurve",
- withInputParameters: [
- "inputPoint0": CIVector(x: 0.0, y: inputRedValues.valueAtIndex(0)),
- "inputPoint1": CIVector(x: 0.25, y: inputRedValues.valueAtIndex(1)),
- "inputPoint2": CIVector(x: 0.5, y: inputRedValues.valueAtIndex(2)),
- "inputPoint3": CIVector(x: 0.75, y: inputRedValues.valueAtIndex(3)),
- "inputPoint4": CIVector(x: 1.0, y: inputRedValues.valueAtIndex(4))
+ let red = inputImage.applyingFilter("CIToneCurve",
+ parameters: [
+ "inputPoint0": CIVector(x: 0.0, y: inputRedValues.value(at: 0)),
+ "inputPoint1": CIVector(x: 0.25, y: inputRedValues.value(at: 1)),
+ "inputPoint2": CIVector(x: 0.5, y: inputRedValues.value(at: 2)),
+ "inputPoint3": CIVector(x: 0.75, y: inputRedValues.value(at: 3)),
+ "inputPoint4": CIVector(x: 1.0, y: inputRedValues.value(at: 4))
])
- let green = inputImage.imageByApplyingFilter("CIToneCurve",
- withInputParameters: [
- "inputPoint0": CIVector(x: 0.0, y: inputGreenValues.valueAtIndex(0)),
- "inputPoint1": CIVector(x: 0.25, y: inputGreenValues.valueAtIndex(1)),
- "inputPoint2": CIVector(x: 0.5, y: inputGreenValues.valueAtIndex(2)),
- "inputPoint3": CIVector(x: 0.75, y: inputGreenValues.valueAtIndex(3)),
- "inputPoint4": CIVector(x: 1.0, y: inputGreenValues.valueAtIndex(4))
+ let green = inputImage.applyingFilter("CIToneCurve",
+ parameters: [
+ "inputPoint0": CIVector(x: 0.0, y: inputGreenValues.value(at: 0)),
+ "inputPoint1": CIVector(x: 0.25, y: inputGreenValues.value(at: 1)),
+ "inputPoint2": CIVector(x: 0.5, y: inputGreenValues.value(at: 2)),
+ "inputPoint3": CIVector(x: 0.75, y: inputGreenValues.value(at: 3)),
+ "inputPoint4": CIVector(x: 1.0, y: inputGreenValues.value(at: 4))
])
- let blue = inputImage.imageByApplyingFilter("CIToneCurve",
- withInputParameters: [
- "inputPoint0": CIVector(x: 0.0, y: inputBlueValues.valueAtIndex(0)),
- "inputPoint1": CIVector(x: 0.25, y: inputBlueValues.valueAtIndex(1)),
- "inputPoint2": CIVector(x: 0.5, y: inputBlueValues.valueAtIndex(2)),
- "inputPoint3": CIVector(x: 0.75, y: inputBlueValues.valueAtIndex(3)),
- "inputPoint4": CIVector(x: 1.0, y: inputBlueValues.valueAtIndex(4))
+ let blue = inputImage.applyingFilter("CIToneCurve",
+ parameters: [
+ "inputPoint0": CIVector(x: 0.0, y: inputBlueValues.value(at: 0)),
+ "inputPoint1": CIVector(x: 0.25, y: inputBlueValues.value(at: 1)),
+ "inputPoint2": CIVector(x: 0.5, y: inputBlueValues.value(at: 2)),
+ "inputPoint3": CIVector(x: 0.75, y: inputBlueValues.value(at: 3)),
+ "inputPoint4": CIVector(x: 1.0, y: inputBlueValues.value(at: 4))
])
rgbChannelCompositing.inputRedImage = red
@@ -182,16 +182,16 @@ class RGBChannelToneCurve: CIFilter
class RGBChannelBrightnessAndContrast: CIFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- var inputRedBrightness: CGFloat = 0
- var inputRedContrast: CGFloat = 1
+ @objc var inputRedBrightness: CGFloat = 0
+ @objc var inputRedContrast: CGFloat = 1
- var inputGreenBrightness: CGFloat = 0
- var inputGreenContrast: CGFloat = 1
+ @objc var inputGreenBrightness: CGFloat = 0
+ @objc var inputGreenContrast: CGFloat = 1
- var inputBlueBrightness: CGFloat = 0
- var inputBlueContrast: CGFloat = 1
+ @objc var inputBlueBrightness: CGFloat = 0
+ @objc var inputBlueContrast: CGFloat = 1
let rgbChannelCompositing = RGBChannelCompositing()
@@ -207,10 +207,10 @@ class RGBChannelBrightnessAndContrast: CIFilter
inputBlueContrast = 1
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "RGB Brightness And Contrast",
+ kCIAttributeFilterDisplayName: "RGB Brightness And Contrast" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -280,18 +280,18 @@ class RGBChannelBrightnessAndContrast: CIFilter
return nil
}
- let red = inputImage.imageByApplyingFilter("CIColorControls",
- withInputParameters: [
+ let red = inputImage.applyingFilter("CIColorControls",
+ parameters: [
kCIInputBrightnessKey: inputRedBrightness,
kCIInputContrastKey: inputRedContrast])
- let green = inputImage.imageByApplyingFilter("CIColorControls",
- withInputParameters: [
+ let green = inputImage.applyingFilter("CIColorControls",
+ parameters: [
kCIInputBrightnessKey: inputGreenBrightness,
kCIInputContrastKey: inputGreenContrast])
- let blue = inputImage.imageByApplyingFilter("CIColorControls",
- withInputParameters: [
+ let blue = inputImage.applyingFilter("CIColorControls",
+ parameters: [
kCIInputBrightnessKey: inputBlueBrightness,
kCIInputContrastKey: inputBlueContrast])
@@ -309,10 +309,10 @@ class RGBChannelBrightnessAndContrast: CIFilter
class ChromaticAberration: CIFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- var inputAngle: CGFloat = 0
- var inputRadius: CGFloat = 2
+ @objc var inputAngle: CGFloat = 0
+ @objc var inputRadius: CGFloat = 2
let rgbChannelCompositing = RGBChannelCompositing()
@@ -322,10 +322,10 @@ class ChromaticAberration: CIFilter
inputRadius = 2
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Chromatic Abberation",
+ kCIAttributeFilterDisplayName: "Chromatic Abberation" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -363,21 +363,21 @@ class ChromaticAberration: CIFilter
let greenAngle = inputAngle + tau * 0.333
let blueAngle = inputAngle + tau * 0.666
- let redTransform = CGAffineTransformMakeTranslation(sin(redAngle) * inputRadius, cos(redAngle) * inputRadius)
- let greenTransform = CGAffineTransformMakeTranslation(sin(greenAngle) * inputRadius, cos(greenAngle) * inputRadius)
- let blueTransform = CGAffineTransformMakeTranslation(sin(blueAngle) * inputRadius, cos(blueAngle) * inputRadius)
+ let redTransform = CGAffineTransform(translationX: sin(redAngle) * inputRadius, y: cos(redAngle) * inputRadius)
+ let greenTransform = CGAffineTransform(translationX: sin(greenAngle) * inputRadius, y: cos(greenAngle) * inputRadius)
+ let blueTransform = CGAffineTransform(translationX: sin(blueAngle) * inputRadius, y: cos(blueAngle) * inputRadius)
- let red = inputImage.imageByApplyingFilter("CIAffineTransform",
- withInputParameters: [kCIInputTransformKey: NSValue(CGAffineTransform: redTransform)])
- .imageByCroppingToRect(inputImage.extent)
+ let red = inputImage.applyingFilter("CIAffineTransform",
+ parameters: [kCIInputTransformKey: NSValue(cgAffineTransform: redTransform)])
+ .cropped(to: inputImage.extent)
- let green = inputImage.imageByApplyingFilter("CIAffineTransform",
- withInputParameters: [kCIInputTransformKey: NSValue(CGAffineTransform: greenTransform)])
- .imageByCroppingToRect(inputImage.extent)
+ let green = inputImage.applyingFilter("CIAffineTransform",
+ parameters: [kCIInputTransformKey: NSValue(cgAffineTransform: greenTransform)])
+ .cropped(to: inputImage.extent)
- let blue = inputImage.imageByApplyingFilter("CIAffineTransform",
- withInputParameters: [kCIInputTransformKey: NSValue(CGAffineTransform: blueTransform)])
- .imageByCroppingToRect(inputImage.extent)
+ let blue = inputImage.applyingFilter("CIAffineTransform",
+ parameters: [kCIInputTransformKey: NSValue(cgAffineTransform: blueTransform)])
+ .cropped(to: inputImage.extent)
rgbChannelCompositing.inputRedImage = red
rgbChannelCompositing.inputGreenImage = green
@@ -393,11 +393,11 @@ class ChromaticAberration: CIFilter
class RGBChannelGaussianBlur: CIFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- var inputRedRadius: CGFloat = 2
- var inputGreenRadius: CGFloat = 4
- var inputBlueRadius: CGFloat = 8
+ @objc var inputRedRadius: CGFloat = 2
+ @objc var inputGreenRadius: CGFloat = 4
+ @objc var inputBlueRadius: CGFloat = 8
let rgbChannelCompositing = RGBChannelCompositing()
@@ -408,10 +408,10 @@ class RGBChannelGaussianBlur: CIFilter
inputBlueRadius = 8
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "RGB Channel Gaussian Blur",
+ kCIAttributeFilterDisplayName: "RGB Channel Gaussian Blur" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -455,16 +455,16 @@ class RGBChannelGaussianBlur: CIFilter
}
let red = inputImage
- .imageByApplyingFilter("CIGaussianBlur", withInputParameters: [kCIInputRadiusKey: inputRedRadius])
- .imageByClampingToExtent()
+ .applyingFilter("CIGaussianBlur", parameters: [kCIInputRadiusKey: inputRedRadius])
+ .clampedToExtent()
let green = inputImage
- .imageByApplyingFilter("CIGaussianBlur", withInputParameters: [kCIInputRadiusKey: inputGreenRadius])
- .imageByClampingToExtent()
+ .applyingFilter("CIGaussianBlur", parameters: [kCIInputRadiusKey: inputGreenRadius])
+ .clampedToExtent()
let blue = inputImage
- .imageByApplyingFilter("CIGaussianBlur", withInputParameters: [kCIInputRadiusKey: inputBlueRadius])
- .imageByClampingToExtent()
+ .applyingFilter("CIGaussianBlur", parameters: [kCIInputRadiusKey: inputBlueRadius])
+ .clampedToExtent()
rgbChannelCompositing.inputRedImage = red
rgbChannelCompositing.inputGreenImage = green
@@ -472,4 +472,4 @@ class RGBChannelGaussianBlur: CIFilter
return rgbChannelCompositing.outputImage
}
-}
\ No newline at end of file
+}
diff --git a/Filterpedia/customFilters/RefractedTextFilter.swift b/Filterpedia/customFilters/RefractedTextFilter.swift
old mode 100644
new mode 100755
index df885ae..2f5fa7e
--- a/Filterpedia/customFilters/RefractedTextFilter.swift
+++ b/Filterpedia/customFilters/RefractedTextFilter.swift
@@ -23,7 +23,7 @@ import CoreImage
class RefractedTextFilter: CIFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
{
didSet
{
@@ -34,7 +34,7 @@ class RefractedTextFilter: CIFilter
}
}
- var inputText: NSString = "Filterpedia"
+ @objc var inputText: NSString = "Filterpedia"
{
didSet
{
@@ -42,14 +42,14 @@ class RefractedTextFilter: CIFilter
}
}
- var inputRefractiveIndex: CGFloat = 4.0
- var inputLensScale: CGFloat = 50
- var inputLightingAmount: CGFloat = 1.5
+ @objc var inputRefractiveIndex: CGFloat = 4.0
+ @objc var inputLensScale: CGFloat = 50
+ @objc var inputLightingAmount: CGFloat = 1.5
- var inputLensBlur: CGFloat = 0
- var inputBackgroundBlur: CGFloat = 2
+ @objc var inputLensBlur: CGFloat = 0
+ @objc var inputBackgroundBlur: CGFloat = 2
- var inputRadius: CGFloat = 15
+ @objc var inputRadius: CGFloat = 15
{
didSet
{
@@ -60,13 +60,13 @@ class RefractedTextFilter: CIFilter
}
}
- private var refractingImage: CIImage?
- private var rawTextImage: CIImage?
+ fileprivate var refractingImage: CIImage?
+ fileprivate var rawTextImage: CIImage?
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Refracted Text",
+ kCIAttributeFilterDisplayName: "Refracted Text" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -150,7 +150,7 @@ class RefractedTextFilter: CIFilter
override var outputImage: CIImage!
{
guard let inputImage = inputImage,
- refractingKernel = refractingKernel else
+ let refractingKernel = refractingKernel else
{
return nil
}
@@ -165,21 +165,21 @@ class RefractedTextFilter: CIFilter
refractingImage!,
inputRefractiveIndex,
inputLensScale,
- inputLightingAmount]
+ inputLightingAmount] as [Any]
- let blurMask = rawTextImage?.imageByApplyingFilter("CIColorInvert", withInputParameters: nil)
+ let blurMask = rawTextImage?.applyingFilter("CIColorInvert", parameters: [:])
- return refractingKernel.applyWithExtent(extent,
+ return refractingKernel.apply(extent: extent,
roiCallback:
{
(index, rect) in
return rect
},
arguments: arguments)!
- .imageByApplyingFilter("CIMaskedVariableBlur", withInputParameters: [
+ .applyingFilter("CIMaskedVariableBlur", parameters: [
kCIInputRadiusKey: inputBackgroundBlur,
"inputMask": blurMask!])
- .imageByApplyingFilter("CIMaskedVariableBlur", withInputParameters: [
+ .applyingFilter("CIMaskedVariableBlur", parameters: [
kCIInputRadiusKey: inputLensBlur,
"inputMask": rawTextImage!])
}
@@ -189,32 +189,32 @@ class RefractedTextFilter: CIFilter
let label = UILabel(frame: inputImage!.extent)
label.text = String(inputText)
- label.textAlignment = .Center
- label.font = UIFont.boldSystemFontOfSize(300)
+ label.textAlignment = .center
+ label.font = UIFont.boldSystemFont(ofSize: 300)
label.adjustsFontSizeToFitWidth = true
label.numberOfLines = 0
- label.textColor = UIColor.whiteColor()
+ label.textColor = UIColor.white
UIGraphicsBeginImageContextWithOptions(
CGSize(width: label.frame.width,
height: label.frame.height), true, 1)
- label.layer.renderInContext(UIGraphicsGetCurrentContext()!)
+ label.layer.render(in: UIGraphicsGetCurrentContext()!)
let textImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
- rawTextImage = CIImage(image: textImage)!
+ rawTextImage = CIImage(image: textImage!)!
refractingImage = CIFilter(name: "CIHeightFieldFromMask",
- withInputParameters: [
+ parameters: [
kCIInputRadiusKey: inputRadius,
kCIInputImageKey: rawTextImage!])?.outputImage?
- .imageByCroppingToRect(inputImage!.extent)
+ .cropped(to: inputImage!.extent)
}
- let refractingKernel = CIKernel(string:
+ let refractingKernel = CIKernel(source:
"float lumaAtOffset(sampler source, vec2 origin, vec2 offset)" +
"{" +
" vec3 pixel = sample(source, samplerTransform(source, origin + offset)).rgb;" +
diff --git a/Filterpedia/customFilters/Scatter.swift b/Filterpedia/customFilters/Scatter.swift
old mode 100644
new mode 100755
index 0090609..6b1016c
--- a/Filterpedia/customFilters/Scatter.swift
+++ b/Filterpedia/customFilters/Scatter.swift
@@ -24,13 +24,13 @@ import CoreImage
// inside a warp kernel.
class ScatterWarp: CIFilter
{
- var inputImage: CIImage?
- var inputScatterRadius: CGFloat = 25
+ @objc var inputImage: CIImage?
+ @objc var inputScatterRadius: CGFloat = 25
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Scatter (Warp Kernel)",
+ kCIAttributeFilterDisplayName: "Scatter (Warp Kernel)" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -48,7 +48,7 @@ class ScatterWarp: CIFilter
]
}
- let kernel = CIWarpKernel(string:
+ let kernel = CIWarpKernel(source:
// based on https://www.shadertoy.com/view/ltB3zD - the additional seed
// calculation prevents repetition when using destCoord() as the seed.
"float noise(vec2 co)" +
@@ -67,19 +67,19 @@ class ScatterWarp: CIFilter
override var outputImage: CIImage?
{
- guard let kernel = kernel, inputImage = inputImage else
+ guard let kernel = kernel, let inputImage = inputImage else
{
return nil
}
- return kernel.applyWithExtent(
- inputImage.extent,
+ return kernel.apply(
+ extent: inputImage.extent,
roiCallback:
{
(index, rect) in
return rect
},
- inputImage: inputImage,
+ image: inputImage,
arguments: [inputScatterRadius])
}
}
@@ -88,14 +88,14 @@ class ScatterWarp: CIFilter
// random generator can be blurred allowing for a smoothness attribute.
class Scatter: CIFilter
{
- var inputImage: CIImage?
- var inputScatterRadius: CGFloat = 25
- var inputScatterSmoothness: CGFloat = 1.0
+ @objc var inputImage: CIImage?
+ @objc var inputScatterRadius: CGFloat = 25
+ @objc var inputScatterSmoothness: CGFloat = 1.0
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Scatter",
+ kCIAttributeFilterDisplayName: "Scatter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -122,7 +122,7 @@ class Scatter: CIFilter
]
}
- let kernel = CIKernel(string:
+ let kernel = CIKernel(source:
"kernel vec4 scatter(sampler image, sampler noise, float radius)" +
"{" +
" vec2 workingSpaceCoord = destCoord() + -radius + sample(noise, samplerCoord(noise)).xy * radius * 2.0; " +
@@ -132,19 +132,19 @@ class Scatter: CIFilter
override var outputImage: CIImage?
{
- guard let kernel = kernel, inputImage = inputImage else
+ guard let kernel = kernel, let inputImage = inputImage else
{
return nil
}
let noise = CIFilter(name: "CIRandomGenerator")!.outputImage!
- .imageByApplyingFilter("CIGaussianBlur", withInputParameters: [kCIInputRadiusKey: inputScatterSmoothness])
- .imageByCroppingToRect(inputImage.extent)
+ .applyingFilter("CIGaussianBlur", parameters: [kCIInputRadiusKey: inputScatterSmoothness])
+ .cropped(to: inputImage.extent)
- let arguments = [inputImage, noise, inputScatterRadius]
+ let arguments = [inputImage, noise, inputScatterRadius] as [Any]
- return kernel.applyWithExtent(
- inputImage.extent,
+ return kernel.apply(
+ extent: inputImage.extent,
roiCallback:
{
(index, rect) in
diff --git a/Filterpedia/customFilters/SimplePlasma.swift b/Filterpedia/customFilters/SimplePlasma.swift
old mode 100644
new mode 100755
index 45ee703..c7eb8fc
--- a/Filterpedia/customFilters/SimplePlasma.swift
+++ b/Filterpedia/customFilters/SimplePlasma.swift
@@ -12,16 +12,16 @@ import CoreImage
class SimplePlasma: CIFilter
{
- var inputSize = CIVector(x: 640, y: 640)
- var inputTime: CGFloat = 0
- var inputSharpness: CGFloat = 0.5
- var inputIterations: CGFloat = 7
- var inputScale: CGFloat = 100
+ @objc var inputSize = CIVector(x: 640, y: 640)
+ @objc var inputTime: CGFloat = 0
+ @objc var inputSharpness: CGFloat = 0.5
+ @objc var inputIterations: CGFloat = 7
+ @objc var inputScale: CGFloat = 100
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Simple Plasma",
+ kCIAttributeFilterDisplayName: "Simple Plasma" as AnyObject,
"inputSize": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIVector",
@@ -67,7 +67,7 @@ class SimplePlasma: CIFilter
]
}
- let kernel = CIColorKernel(string:
+ let kernel = CIColorKernel(source:
"kernel vec4 colorkernel(float time, float iterations, float sharpness, float scale)" +
"{" +
" vec2 uv = destCoord() / scale; " +
@@ -94,10 +94,10 @@ class SimplePlasma: CIFilter
return nil
}
- let extent = CGRect(origin: CGPointZero, size: CGSize(width: inputSize.X, height: inputSize.Y))
+ let extent = CGRect(origin: CGPoint.zero, size: CGSize(width: inputSize.x, height: inputSize.y))
- return kernel.applyWithExtent(
- extent,
+ return kernel.apply(
+ extent: extent,
arguments: [inputTime / 10, inputIterations, inputSharpness, inputScale])
}
diff --git a/Filterpedia/customFilters/SobelEdgeDetection.swift b/Filterpedia/customFilters/SobelEdgeDetection.swift
old mode 100644
new mode 100755
index 469ede6..f066521
--- a/Filterpedia/customFilters/SobelEdgeDetection.swift
+++ b/Filterpedia/customFilters/SobelEdgeDetection.swift
@@ -32,7 +32,7 @@ class SobelEdgeDetection3x3: SobelEdgeDetectionBase
horizontalWeights: horizontalSobel,
verticalWeights: verticalSobel)
- return makeOpaqueKernel?.applyWithExtent(inputImage.extent, arguments: [final])
+ return makeOpaqueKernel?.apply(extent: inputImage.extent, arguments: [final])
}
override func displayName() -> String
@@ -69,7 +69,7 @@ class SobelEdgeDetection5x5: SobelEdgeDetectionBase
horizontalWeights: horizontalSobel,
verticalWeights: verticalSobel)
- return makeOpaqueKernel?.applyWithExtent(inputImage.extent, arguments: [final])
+ return makeOpaqueKernel?.apply(extent: inputImage.extent, arguments: [final])
}
override func displayName() -> String
@@ -80,25 +80,25 @@ class SobelEdgeDetection5x5: SobelEdgeDetectionBase
class SobelEdgeDetectionBase: CIFilter
{
- let makeOpaqueKernel = CIColorKernel(string: "kernel vec4 xyz(__sample pixel) { return vec4(pixel.rgb, 1.0); }")
+ let makeOpaqueKernel = CIColorKernel(source: "kernel vec4 xyz(__sample pixel) { return vec4(pixel.rgb, 1.0); }")
- private func sobel(sourceImage: CIImage, filterName: String, horizontalWeights: CIVector, verticalWeights: CIVector) -> CIImage
+ fileprivate func sobel(_ sourceImage: CIImage, filterName: String, horizontalWeights: CIVector, verticalWeights: CIVector) -> CIImage
{
return sourceImage
- .imageByApplyingFilter(filterName,
- withInputParameters: [
+ .applyingFilter(filterName,
+ parameters: [
kCIInputWeightsKey: horizontalWeights.multiply(inputWeight),
kCIInputBiasKey: inputBias])
- .imageByApplyingFilter(filterName,
- withInputParameters: [
+ .applyingFilter(filterName,
+ parameters: [
kCIInputWeightsKey: verticalWeights.multiply(inputWeight),
kCIInputBiasKey: inputBias])
- .imageByCroppingToRect(sourceImage.extent)
+ .cropped(to: sourceImage.extent)
}
- var inputImage : CIImage?
- var inputBias: CGFloat = 1
- var inputWeight: CGFloat = 1
+ @objc var inputImage : CIImage?
+ @objc var inputBias: CGFloat = 1
+ @objc var inputWeight: CGFloat = 1
override func setDefaults()
{
@@ -111,10 +111,10 @@ class SobelEdgeDetectionBase: CIFilter
fatalError("SobelEdgeDetectionBase must be sublassed")
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: displayName(),
+ kCIAttributeFilterDisplayName: displayName() as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
diff --git a/Filterpedia/customFilters/ThirdPartyFilters.swift b/Filterpedia/customFilters/ThirdPartyFilters.swift
old mode 100644
new mode 100755
index 89dd625..44dce2a
--- a/Filterpedia/customFilters/ThirdPartyFilters.swift
+++ b/Filterpedia/customFilters/ThirdPartyFilters.swift
@@ -16,15 +16,15 @@ import CoreImage
class BayerDitherFilter: CIFilter
{
- var inputImage: CIImage?
- var inputIntensity = CGFloat(5.0)
- var inputMatrix = CGFloat(8.0)
- var inputPalette = CGFloat(0.0)
+ @objc var inputImage: CIImage?
+ @objc var inputIntensity = CGFloat(5.0)
+ @objc var inputMatrix = CGFloat(8.0)
+ @objc var inputPalette = CGFloat(0.0)
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Bayer Dither Filter",
+ kCIAttributeFilterDisplayName: "Bayer Dither Filter" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -61,16 +61,16 @@ class BayerDitherFilter: CIFilter
override var outputImage: CIImage!
{
- let CIKernel_DitherBayer = NSBundle.mainBundle().pathForResource("DitherBayer", ofType: "cikernel")
+ let CIKernel_DitherBayer = Bundle.main.path(forResource: "DitherBayer", ofType: "cikernel")
guard let path = CIKernel_DitherBayer,
- code = try? String(contentsOfFile: path),
- ditherKernel = CIColorKernel(string: code) else { return nil }
+ let code = try? String(contentsOfFile: path),
+ let ditherKernel = CIColorKernel(source: code) else { return nil }
guard let inputImage = inputImage else { return nil }
let extent = inputImage.extent
- let arguments = [inputImage, inputIntensity, inputMatrix, inputPalette]
+ let arguments = [inputImage, inputIntensity, inputMatrix, inputPalette] as [Any]
- return ditherKernel.applyWithExtent(extent, arguments: arguments)
+ return ditherKernel.apply(extent: extent, arguments: arguments)
}
-}
\ No newline at end of file
+}
diff --git a/Filterpedia/customFilters/TransverseChromaticAberration.swift b/Filterpedia/customFilters/TransverseChromaticAberration.swift
old mode 100644
new mode 100755
index 923a595..8a336c1
--- a/Filterpedia/customFilters/TransverseChromaticAberration.swift
+++ b/Filterpedia/customFilters/TransverseChromaticAberration.swift
@@ -22,15 +22,15 @@ import CoreImage
class TransverseChromaticAberration: CIFilter
{
- var inputImage: CIImage?
- var inputBlur: CGFloat = 10
- var inputFalloff: CGFloat = 0.2
- var inputSamples: CGFloat = 10
+ @objc var inputImage: CIImage?
+ @objc var inputBlur: CGFloat = 10
+ @objc var inputFalloff: CGFloat = 0.2
+ @objc var inputSamples: CGFloat = 10
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Transverse Chromatic Aberration",
+ kCIAttributeFilterDisplayName: "Transverse Chromatic Aberration" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -66,7 +66,7 @@ class TransverseChromaticAberration: CIFilter
]
}
- let transverseChromaticAberrationKernel = CIKernel(string:
+ let transverseChromaticAberrationKernel = CIKernel(source:
"kernel vec4 motionBlur(sampler image, vec2 size, float sampleCount, float start, float blur) {" +
" int sampleCountInt = int(floor(sampleCount));" +
" vec4 accumulator = vec4(0.0);" +
@@ -97,7 +97,7 @@ class TransverseChromaticAberration: CIFilter
override var outputImage: CIImage?
{
guard let inputImage = inputImage,
- kernel = transverseChromaticAberrationKernel else
+ let kernel = transverseChromaticAberrationKernel else
{
return nil
}
@@ -106,10 +106,10 @@ class TransverseChromaticAberration: CIFilter
CIVector(x: inputImage.extent.width, y: inputImage.extent.height),
inputSamples,
inputFalloff,
- inputBlur]
+ inputBlur] as [Any]
- return kernel.applyWithExtent(
- inputImage.extent,
+ return kernel.apply(
+ extent: inputImage.extent,
roiCallback: {
(index, rect) in
return rect.insetBy(dx: -1, dy: -1)
diff --git a/Filterpedia/customFilters/VImageFilters.swift b/Filterpedia/customFilters/VImageFilters.swift
old mode 100644
new mode 100755
index c0d5816..514e568
--- a/Filterpedia/customFilters/VImageFilters.swift
+++ b/Filterpedia/customFilters/VImageFilters.swift
@@ -27,10 +27,10 @@ import Accelerate
class CircularBokeh: CIFilter, VImageFilter
{
- var inputImage: CIImage?
- var inputBlurRadius: CGFloat = 2
+ @objc var inputImage: CIImage?
+ @objc var inputBlurRadius: CGFloat = 2
- var inputBokehRadius: CGFloat = 15
+ @objc var inputBokehRadius: CGFloat = 15
{
didSet
{
@@ -38,7 +38,7 @@ class CircularBokeh: CIFilter, VImageFilter
}
}
- var inputBokehBias: CGFloat = 0.25
+ @objc var inputBokehBias: CGFloat = 0.25
{
didSet
{
@@ -46,12 +46,12 @@ class CircularBokeh: CIFilter, VImageFilter
}
}
- private var probe: [UInt8]?
+ fileprivate var probe: [UInt8]?
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Circular Bokeh",
+ kCIAttributeFilterDisplayName: "Circular Bokeh" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -100,7 +100,7 @@ class CircularBokeh: CIFilter, VImageFilter
let imageRef = ciContext.createCGImage(
inputImage,
- fromRect: inputImage.extent)
+ from: inputImage.extent)
var imageBuffer = vImage_Buffer()
@@ -108,16 +108,16 @@ class CircularBokeh: CIFilter, VImageFilter
&imageBuffer,
&format,
nil,
- imageRef,
+ imageRef!,
UInt32(kvImageNoFlags))
- let pixelBuffer = malloc(CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef))
+ let pixelBuffer = malloc((imageRef?.bytesPerRow)! * (imageRef?.height)!)
var outBuffer = vImage_Buffer(
data: pixelBuffer,
- height: UInt(CGImageGetHeight(imageRef)),
- width: UInt(CGImageGetWidth(imageRef)),
- rowBytes: CGImageGetBytesPerRow(imageRef))
+ height: UInt((imageRef?.height)!),
+ width: UInt((imageRef?.width)!),
+ rowBytes: (imageRef?.bytesPerRow)!)
let probeValue = UInt8((1 - inputBokehBias) * 30)
let radius = Int(inputBokehRadius)
@@ -125,7 +125,7 @@ class CircularBokeh: CIFilter, VImageFilter
if probe == nil
{
- probe = 0.stride(to: (diameter * diameter), by: 1).map
+ probe = stride(from: 0, to: (diameter * diameter), by: 1).map
{
let x = Float(($0 % diameter) - radius)
let y = Float(($0 / diameter) - radius)
@@ -158,9 +158,9 @@ class CircularBokeh: CIFilter, VImageFilter
free(pixelBuffer)
free(imageBuffer.data)
- return outImage!.imageByApplyingFilter(
+ return outImage!.applyingFilter(
"CIGaussianBlur",
- withInputParameters: [kCIInputRadiusKey: inputBlurRadius])
+ parameters: [kCIInputRadiusKey: inputBlurRadius])
}
}
@@ -168,12 +168,12 @@ class CircularBokeh: CIFilter, VImageFilter
class HistogramEqualization: CIFilter, VImageFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Histogram Equalization",
+ kCIAttributeFilterDisplayName: "Histogram Equalization" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -195,7 +195,7 @@ class HistogramEqualization: CIFilter, VImageFilter
let imageRef = ciContext.createCGImage(
inputImage,
- fromRect: inputImage.extent)
+ from: inputImage.extent)
var imageBuffer = vImage_Buffer()
@@ -203,16 +203,16 @@ class HistogramEqualization: CIFilter, VImageFilter
&imageBuffer,
&format,
nil,
- imageRef,
+ imageRef!,
UInt32(kvImageNoFlags))
- let pixelBuffer = malloc(CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef))
+ let pixelBuffer = malloc((imageRef?.bytesPerRow)! * (imageRef?.height)!)
var outBuffer = vImage_Buffer(
data: pixelBuffer,
- height: UInt(CGImageGetHeight(imageRef)),
- width: UInt(CGImageGetWidth(imageRef)),
- rowBytes: CGImageGetBytesPerRow(imageRef))
+ height: UInt((imageRef?.height)!),
+ width: UInt((imageRef?.width)!),
+ rowBytes: (imageRef?.bytesPerRow)!)
vImageEqualization_ARGB8888(
@@ -233,20 +233,20 @@ class HistogramEqualization: CIFilter, VImageFilter
class EndsInContrastStretch: CIFilter, VImageFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- var inputPercentLowRed: CGFloat = 0
- var inputPercentLowGreen: CGFloat = 0
- var inputPercentLowBlue: CGFloat = 0
+ @objc var inputPercentLowRed: CGFloat = 0
+ @objc var inputPercentLowGreen: CGFloat = 0
+ @objc var inputPercentLowBlue: CGFloat = 0
- var inputPercentHiRed: CGFloat = 0
- var inputPercentHiGreen: CGFloat = 0
- var inputPercentHiBlue: CGFloat = 0
+ @objc var inputPercentHiRed: CGFloat = 0
+ @objc var inputPercentHiGreen: CGFloat = 0
+ @objc var inputPercentHiBlue: CGFloat = 0
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Ends In Contrast Stretch",
+ kCIAttributeFilterDisplayName: "Ends In Contrast Stretch" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -322,7 +322,7 @@ class EndsInContrastStretch: CIFilter, VImageFilter
let imageRef = ciContext.createCGImage(
inputImage,
- fromRect: inputImage.extent)
+ from: inputImage.extent)
var imageBuffer = vImage_Buffer()
@@ -330,16 +330,16 @@ class EndsInContrastStretch: CIFilter, VImageFilter
&imageBuffer,
&format,
nil,
- imageRef,
+ imageRef!,
UInt32(kvImageNoFlags))
- let pixelBuffer = malloc(CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef))
+ let pixelBuffer = malloc((imageRef?.bytesPerRow)! * (imageRef?.height)!)
var outBuffer = vImage_Buffer(
data: pixelBuffer,
- height: UInt(CGImageGetHeight(imageRef)),
- width: UInt(CGImageGetWidth(imageRef)),
- rowBytes: CGImageGetBytesPerRow(imageRef))
+ height: UInt((imageRef?.height)!),
+ width: UInt((imageRef?.width)!),
+ rowBytes: (imageRef?.bytesPerRow)!)
let low = [inputPercentLowRed, inputPercentLowGreen, inputPercentLowBlue, 0].map { return UInt32($0) }
let hi = [inputPercentHiRed, inputPercentHiGreen, inputPercentHiBlue, 0].map { return UInt32($0) }
@@ -364,12 +364,12 @@ class EndsInContrastStretch: CIFilter, VImageFilter
class ContrastStretch: CIFilter, VImageFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Contrast Stretch",
+ kCIAttributeFilterDisplayName: "Contrast Stretch" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -391,7 +391,7 @@ class ContrastStretch: CIFilter, VImageFilter
let imageRef = ciContext.createCGImage(
inputImage,
- fromRect: inputImage.extent)
+ from: inputImage.extent)
var imageBuffer = vImage_Buffer()
@@ -399,16 +399,16 @@ class ContrastStretch: CIFilter, VImageFilter
&imageBuffer,
&format,
nil,
- imageRef,
+ imageRef!,
UInt32(kvImageNoFlags))
- let pixelBuffer = malloc(CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef))
+ let pixelBuffer = malloc((imageRef?.bytesPerRow)! * (imageRef?.height)!)
var outBuffer = vImage_Buffer(
data: pixelBuffer,
- height: UInt(CGImageGetHeight(imageRef)),
- width: UInt(CGImageGetWidth(imageRef)),
- rowBytes: CGImageGetBytesPerRow(imageRef))
+ height: UInt((imageRef?.height)!),
+ width: UInt((imageRef?.width)!),
+ rowBytes: (imageRef?.bytesPerRow)!)
vImageContrastStretch_ARGB8888(
&imageBuffer,
@@ -428,13 +428,13 @@ class ContrastStretch: CIFilter, VImageFilter
class HistogramSpecification: CIFilter, VImageFilter
{
- var inputImage: CIImage?
- var inputHistogramSource: CIImage?
+ @objc var inputImage: CIImage?
+ @objc var inputHistogramSource: CIImage?
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Histogram Specification",
+ kCIAttributeFilterDisplayName: "Histogram Specification" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
kCIAttributeDisplayName: "Image",
@@ -454,48 +454,49 @@ class HistogramSpecification: CIFilter, VImageFilter
override var outputImage: CIImage?
{
guard let inputImage = inputImage,
- inputHistogramSource = inputHistogramSource else
+ let inputHistogramSource = inputHistogramSource else
{
return nil
}
let imageRef = ciContext.createCGImage(
inputImage,
- fromRect: inputImage.extent)
+ from: inputImage.extent)
var imageBuffer = vImageBufferFromCIImage(inputImage, ciContext: ciContext)
var histogramSourceBuffer = vImageBufferFromCIImage(inputHistogramSource, ciContext: ciContext)
- let alpha = [UInt](count: 256, repeatedValue: 0)
- let red = [UInt](count: 256, repeatedValue: 0)
- let green = [UInt](count: 256, repeatedValue: 0)
- let blue = [UInt](count: 256, repeatedValue: 0)
+ let alpha = [UInt](repeating: 0, count: 256)
+ let red = [UInt](repeating: 0, count: 256)
+ let green = [UInt](repeating: 0, count: 256)
+ let blue = [UInt](repeating: 0, count: 256)
- let alphaMutablePointer = UnsafeMutablePointer(alpha)
- let redMutablePointer = UnsafeMutablePointer(red)
- let greenMutablePointer = UnsafeMutablePointer(green)
- let blueMutablePointer = UnsafeMutablePointer(blue)
+ let alphaMutablePointer = UnsafeMutablePointer(mutating: alpha)
+ let redMutablePointer = UnsafeMutablePointer(mutating: red)
+ let greenMutablePointer = UnsafeMutablePointer(mutating: green)
+ let blueMutablePointer = UnsafeMutablePointer(mutating: blue)
- let rgba = [redMutablePointer, greenMutablePointer, blueMutablePointer, alphaMutablePointer]
+ let rgba: [UnsafeMutablePointer?] = [redMutablePointer, greenMutablePointer, blueMutablePointer, alphaMutablePointer]
- let histogram = UnsafeMutablePointer>(rgba)
+ let histogram = UnsafeMutablePointer?>(mutating: rgba)
vImageHistogramCalculation_ARGB8888(&histogramSourceBuffer, histogram, UInt32(kvImageNoFlags))
- let pixelBuffer = malloc(CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef))
+ let pixelBuffer = malloc((imageRef?.bytesPerRow)! * (imageRef?.height)!)
var outBuffer = vImage_Buffer(
data: pixelBuffer,
- height: UInt(CGImageGetHeight(imageRef)),
- width: UInt(CGImageGetWidth(imageRef)),
- rowBytes: CGImageGetBytesPerRow(imageRef))
+ height: UInt((imageRef?.height)!),
+ width: UInt((imageRef?.width)!),
+ rowBytes: (imageRef?.bytesPerRow)!)
let alphaPointer = UnsafePointer(alpha)
let redPointer = UnsafePointer(red)
let greenPointer = UnsafePointer(green)
let bluePointer = UnsafePointer(blue)
- let rgbaMutablePointer = UnsafeMutablePointer>([redPointer, greenPointer, bluePointer, alphaPointer])
+ let pointers: [UnsafePointer?] = [redPointer, greenPointer, bluePointer, alphaPointer]
+ let rgbaMutablePointer = UnsafeMutablePointer?>(mutating: pointers)
vImageHistogramSpecification_ARGB8888(&imageBuffer, &outBuffer, rgbaMutablePointer, UInt32(kvImageNoFlags))
@@ -515,7 +516,7 @@ protocol VImageFilter {
}
let bitmapInfo:CGBitmapInfo = CGBitmapInfo(
- rawValue: CGImageAlphaInfo.Last.rawValue)
+ rawValue: CGImageAlphaInfo.last.rawValue)
var format = vImage_CGImageFormat(
bitsPerComponent: 8,
@@ -524,13 +525,13 @@ var format = vImage_CGImageFormat(
bitmapInfo: bitmapInfo,
version: 0,
decode: nil,
- renderingIntent: .RenderingIntentDefault)
+ renderingIntent: .defaultIntent)
-func vImageBufferFromCIImage(ciImage: CIImage, ciContext: CIContext) -> vImage_Buffer
+func vImageBufferFromCIImage(_ ciImage: CIImage, ciContext: CIContext) -> vImage_Buffer
{
let imageRef = ciContext.createCGImage(
ciImage,
- fromRect: ciImage.extent)
+ from: ciImage.extent)
var buffer = vImage_Buffer()
@@ -538,7 +539,7 @@ func vImageBufferFromCIImage(ciImage: CIImage, ciContext: CIContext) -> vImage_B
&buffer,
&format,
nil,
- imageRef,
+ imageRef!,
UInt32(kvImageNoFlags))
return buffer
@@ -559,6 +560,6 @@ extension CIImage
UInt32(kvImageNoFlags),
&error)
- self.init(CGImage: cgImage.takeRetainedValue())
+ self.init(cgImage: (cgImage?.takeRetainedValue())!)
}
}
diff --git a/Filterpedia/customFilters/Voronoi.cikernel b/Filterpedia/customFilters/Voronoi.cikernel
old mode 100644
new mode 100755
diff --git a/Filterpedia/customFilters/VoronoiNoise.swift b/Filterpedia/customFilters/VoronoiNoise.swift
old mode 100644
new mode 100755
index e68446a..1ecdb78
--- a/Filterpedia/customFilters/VoronoiNoise.swift
+++ b/Filterpedia/customFilters/VoronoiNoise.swift
@@ -10,16 +10,16 @@ import CoreImage
class VoronoiNoise: CIFilter
{
- var inputSeed: CGFloat = 20
- var inputSize: CGFloat = 60
- var inputDensity: CGFloat = 0.75
- var inputWidth: CGFloat = 640
- var inputHeight: CGFloat = 640
+ @objc var inputSeed: CGFloat = 20
+ @objc var inputSize: CGFloat = 60
+ @objc var inputDensity: CGFloat = 0.75
+ @objc var inputWidth: CGFloat = 640
+ @objc var inputHeight: CGFloat = 640
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Voronoi Noise",
+ kCIAttributeFilterDisplayName: "Voronoi Noise" as AnyObject,
"inputSeed": [kCIAttributeIdentity: 0,
kCIAttributeClass: "NSNumber",
kCIAttributeDefault: 1,
@@ -65,11 +65,11 @@ class VoronoiNoise: CIFilter
let voronoiKernel: CIColorKernel =
{
- let shaderPath = NSBundle.mainBundle().pathForResource("Voronoi", ofType: "cikernel")
+ let shaderPath = Bundle.main.path(forResource: "Voronoi", ofType: "cikernel")
guard let path = shaderPath,
- code = try? String(contentsOfFile: path),
- kernel = CIColorKernel(string: code) else
+ let code = try? String(contentsOfFile: path),
+ let kernel = CIColorKernel(source: code) else
{
fatalError("Unable to build Voronoi shader")
}
@@ -79,8 +79,8 @@ class VoronoiNoise: CIFilter
override var outputImage: CIImage?
{
- return voronoiKernel.applyWithExtent(
- CGRect(origin: CGPointZero, size: CGSize(width: inputWidth, height: inputHeight)),
+ return voronoiKernel.apply(
+ extent: CGRect(origin: CGPoint.zero, size: CGSize(width: inputWidth, height: inputHeight)),
arguments: [inputSeed, inputSize, inputDensity])
}
-}
\ No newline at end of file
+}
diff --git a/Filterpedia/customFilters/cikl_sky.cikernel b/Filterpedia/customFilters/cikl_sky.cikernel
old mode 100644
new mode 100755
diff --git a/Filterpedia/customFilters/flame.cikernel b/Filterpedia/customFilters/flame.cikernel
old mode 100644
new mode 100755
diff --git a/Filterpedia/customFilters/metalFilters/MetalFilters.swift b/Filterpedia/customFilters/metalFilters/MetalFilters.swift
old mode 100644
new mode 100755
index b98f62e..4386c04
--- a/Filterpedia/customFilters/metalFilters/MetalFilters.swift
+++ b/Filterpedia/customFilters/metalFilters/MetalFilters.swift
@@ -39,8 +39,8 @@ class MetalPixellateFilter: MetalImageFilter
fatalError("init(coder:) has not been implemented")
}
- var inputPixelWidth: CGFloat = 50
- var inputPixelHeight: CGFloat = 25
+ @objc var inputPixelWidth: CGFloat = 50
+ @objc var inputPixelHeight: CGFloat = 25
override func setDefaults()
{
@@ -48,10 +48,10 @@ class MetalPixellateFilter: MetalImageFilter
inputPixelHeight = 25
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Metal Pixellate",
+ kCIAttributeFilterDisplayName: "Metal Pixellate" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -93,14 +93,14 @@ class MetalPerlinNoise: MetalGeneratorFilter
fatalError("init(coder:) has not been implemented")
}
- var inputReciprocalScale = CGFloat(50)
- var inputOctaves = CGFloat(2)
- var inputPersistence = CGFloat(0.5)
+ @objc var inputReciprocalScale = CGFloat(50)
+ @objc var inputOctaves = CGFloat(2)
+ @objc var inputPersistence = CGFloat(0.5)
- var inputColor0 = CIColor(red: 0.5, green: 0.25, blue: 0)
- var inputColor1 = CIColor(red: 0, green: 0, blue: 0.15)
+ @objc var inputColor0 = CIColor(red: 0.5, green: 0.25, blue: 0)
+ @objc var inputColor1 = CIColor(red: 0, green: 0, blue: 0.15)
- var inputZ = CGFloat(0)
+ @objc var inputZ = CGFloat(0)
override func setDefaults()
{
@@ -112,10 +112,10 @@ class MetalPerlinNoise: MetalGeneratorFilter
inputColor1 = CIColor(red: 0, green: 0, blue: 0.15)
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Metal Perlin Noise",
+ kCIAttributeFilterDisplayName: "Metal Perlin Noise" as AnyObject,
"inputReciprocalScale": [kCIAttributeIdentity: 0,
kCIAttributeClass: "NSNumber",
@@ -200,17 +200,17 @@ class MetalKuwaharaFilter: MetalImageFilter
fatalError("init(coder:) has not been implemented")
}
- var inputRadius: CGFloat = 15
+ @objc var inputRadius: CGFloat = 15
override func setDefaults()
{
inputRadius = 15
}
- override var attributes: [String : AnyObject]
+ override var attributes: [String : Any]
{
return [
- kCIAttributeFilterDisplayName: "Metal Kuwahara",
+ kCIAttributeFilterDisplayName: "Metal Kuwahara" as AnyObject,
"inputImage": [kCIAttributeIdentity: 0,
kCIAttributeClass: "CIImage",
@@ -233,12 +233,12 @@ class MetalKuwaharaFilter: MetalImageFilter
class MetalGeneratorFilter: MetalFilter
{
- var inputWidth: CGFloat = 640
- var inputHeight: CGFloat = 640
+ @objc var inputWidth: CGFloat = 640
+ @objc var inputHeight: CGFloat = 640
override func textureInvalid() -> Bool
{
- if let textureDescriptor = textureDescriptor where
+ if let textureDescriptor = textureDescriptor,
textureDescriptor.width != Int(inputWidth) ||
textureDescriptor.height != Int(inputHeight)
{
@@ -251,12 +251,12 @@ class MetalGeneratorFilter: MetalFilter
class MetalImageFilter: MetalFilter
{
- var inputImage: CIImage?
+ @objc var inputImage: CIImage?
override func textureInvalid() -> Bool
{
if let textureDescriptor = textureDescriptor,
- inputImage = inputImage where
+ let inputImage = inputImage,
textureDescriptor.width != Int(inputImage.extent.width) ||
textureDescriptor.height != Int(inputImage.extent.height)
{
@@ -277,27 +277,27 @@ class MetalImageFilter: MetalFilter
class MetalFilter: CIFilter, MetalRenderable
{
let device: MTLDevice = MTLCreateSystemDefaultDevice()!
- let colorSpace = CGColorSpaceCreateDeviceRGB()!
+ let colorSpace = CGColorSpaceCreateDeviceRGB()
lazy var ciContext: CIContext =
{
[unowned self] in
- return CIContext(MTLDevice: self.device)
+ return CIContext(mtlDevice: self.device)
}()
lazy var commandQueue: MTLCommandQueue =
{
[unowned self] in
- return self.device.newCommandQueue()
+ return self.device.makeCommandQueue()!
}()
lazy var defaultLibrary: MTLLibrary =
{
[unowned self] in
- return self.device.newDefaultLibrary()!
+ return self.device.makeDefaultLibrary()!
}()
var pipelineState: MTLComputePipelineState!
@@ -320,7 +320,7 @@ class MetalFilter: CIFilter, MetalRenderable
}
if let imageFilter = self as? MetalImageFilter,
- inputImage = imageFilter.inputImage
+ let inputImage = imageFilter.inputImage
{
return imageFromComputeShader(width: inputImage.extent.width,
height: inputImage.extent.height,
@@ -343,20 +343,20 @@ class MetalFilter: CIFilter, MetalRenderable
super.init()
- let kernelFunction = defaultLibrary.newFunctionWithName(self.functionName)!
+ let kernelFunction = defaultLibrary.makeFunction(name: self.functionName)!
do
{
- pipelineState = try self.device.newComputePipelineStateWithFunction(kernelFunction)
+ pipelineState = try self.device.makeComputePipelineState(function: kernelFunction)
let maxTotalThreadsPerThreadgroup = Double(pipelineState.maxTotalThreadsPerThreadgroup)
let threadExecutionWidth = Double(pipelineState.threadExecutionWidth)
- let threadsPerThreadgroupSide = 0.stride(
- to: Int(sqrt(maxTotalThreadsPerThreadgroup)),
- by: 1).reduce(16)
+ let threadsPerThreadgroupSide = stride(
+ from: 0,
+ to: Int(sqrt(maxTotalThreadsPerThreadgroup)), by: 1).reduce(16)
{
- return (Double($1 * $1) / threadExecutionWidth) % 1 == 0 ? $1 : $0
+ return (Double($1 * $1) / threadExecutionWidth).truncatingRemainder(dividingBy: 1) == 0 ? $1 : $0
}
threadsPerThreadgroup = MTLSize(width:threadsPerThreadgroupSide,
@@ -386,80 +386,85 @@ class MetalFilter: CIFilter, MetalRenderable
fatalError("textureInvalid() not implemented in MetalFilter")
}
- func imageFromComputeShader(width width: CGFloat, height: CGFloat, inputImage: CIImage?) -> CIImage
+ func imageFromComputeShader(width: CGFloat, height: CGFloat, inputImage: CIImage?) -> CIImage
{
if textureDescriptor == nil
{
- textureDescriptor = MTLTextureDescriptor.texture2DDescriptorWithPixelFormat(.RGBA8Unorm,
+ textureDescriptor = MTLTextureDescriptor.texture2DDescriptor(pixelFormat: .rgba8Unorm,
width: Int(width),
height: Int(height),
mipmapped: false)
- kernelInputTexture = device.newTextureWithDescriptor(textureDescriptor!)
- kernelOutputTexture = device.newTextureWithDescriptor(textureDescriptor!)
+ textureDescriptor?.usage = .shaderRead
+ kernelInputTexture = device.makeTexture(descriptor: textureDescriptor!)
+
+ textureDescriptor?.usage = [.shaderRead, .shaderWrite]
+ kernelOutputTexture = device.makeTexture(descriptor: textureDescriptor!)
threadgroupsPerGrid = MTLSizeMake(
textureDescriptor!.width / threadsPerThreadgroup.width,
textureDescriptor!.height / threadsPerThreadgroup.height, 1)
}
- let commandBuffer = commandQueue.commandBuffer()
+ let commandBuffer = commandQueue.makeCommandBuffer()!
if let imageFilter = self as? MetalImageFilter,
- inputImage = imageFilter.inputImage
+ let inputImage = imageFilter.inputImage
{
ciContext.render(inputImage,
- toMTLTexture: kernelInputTexture!,
+ to: kernelInputTexture!,
commandBuffer: commandBuffer,
bounds: inputImage.extent,
colorSpace: colorSpace)
}
- let commandEncoder = commandBuffer.computeCommandEncoder()
+ let commandEncoder = commandBuffer.makeComputeCommandEncoder()!
commandEncoder.setComputePipelineState(pipelineState)
+// let keys = inputKeys.filter({ (attributes[$0] as? NSDictionary) })
+
// populate float buffers using kCIAttributeIdentity as buffer index
- for inputKey in inputKeys where attributes[inputKey]?[kCIAttributeClass] == "NSNumber"
+ for inputKey in inputKeys where ((attributes[inputKey] as? NSDictionary)?[kCIAttributeClass] as? String) == "NSNumber"
{
if let bufferIndex = (attributes[inputKey] as! [String:AnyObject])[kCIAttributeIdentity] as? Int,
- var bufferValue = valueForKey(inputKey) as? Float
+ var bufferValue = value(forKey: inputKey) as? Float
{
- let buffer = device.newBufferWithBytes(&bufferValue,
- length: sizeof(Float),
- options: MTLResourceOptions.CPUCacheModeDefaultCache)
+ let buffer = device.makeBuffer(bytes: &bufferValue,
+ length: MemoryLayout.size,
+ options: MTLResourceOptions())
- commandEncoder.setBuffer(buffer, offset: 0, atIndex: bufferIndex)
+ commandEncoder.setBuffer(buffer, offset: 0, index: bufferIndex)
}
}
// populate color buffers using kCIAttributeIdentity as buffer index
- for inputKey in inputKeys where attributes[inputKey]?[kCIAttributeClass] == "CIColor"
+ for inputKey in inputKeys where ((attributes[inputKey] as? NSDictionary)?[kCIAttributeClass] as? String) == "CIColor"
{
if let bufferIndex = (attributes[inputKey] as! [String:AnyObject])[kCIAttributeIdentity] as? Int,
- bufferValue = valueForKey(inputKey) as? CIColor
+ let bufferValue = value(forKey: inputKey) as? CIColor
{
var color = float4(Float(bufferValue.red),
Float(bufferValue.green),
Float(bufferValue.blue),
Float(bufferValue.alpha))
- let buffer = device.newBufferWithBytes(&color,
- length: sizeof(float4),
- options: MTLResourceOptions.CPUCacheModeDefaultCache)
+ let buffer = device.makeBuffer(bytes: &color,
+ length: MemoryLayout.size,
+ options: MTLResourceOptions())
- commandEncoder.setBuffer(buffer, offset: 0, atIndex: bufferIndex)
+ commandEncoder.setBuffer(buffer, offset: 0, index: bufferIndex)
}
}
if self is MetalImageFilter
{
- commandEncoder.setTexture(kernelInputTexture, atIndex: 0)
- commandEncoder.setTexture(kernelOutputTexture, atIndex: 1)
+ commandEncoder.setTexture(kernelInputTexture, index: 0)
+ commandEncoder.setTexture(kernelOutputTexture, index: 1)
}
else if self is MetalGeneratorFilter
{
- commandEncoder.setTexture(kernelOutputTexture, atIndex: 0)
+ commandEncoder.setTexture(kernelOutputTexture, index: 0)
}
commandEncoder.dispatchThreadgroups(threadgroupsPerGrid!,
@@ -469,8 +474,8 @@ class MetalFilter: CIFilter, MetalRenderable
commandBuffer.commit()
- return CIImage(MTLTexture: kernelOutputTexture!,
- options: [kCIImageColorSpace: colorSpace])
+ return CIImage(mtlTexture: kernelOutputTexture!,
+ options: convertToOptionalCIImageOptionDictionary([convertFromCIImageOption(CIImageOption.colorSpace): colorSpace]))!
}
}
@@ -483,4 +488,15 @@ class MetalFilter: CIFilter, MetalRenderable
protocol MetalRenderable {
-}
\ No newline at end of file
+}
+
+// Helper function inserted by Swift 4.2 migrator.
+fileprivate func convertToOptionalCIImageOptionDictionary(_ input: [String: Any]?) -> [CIImageOption: Any]? {
+ guard let input = input else { return nil }
+ return Dictionary(uniqueKeysWithValues: input.map { key, value in (CIImageOption(rawValue: key), value)})
+}
+
+// Helper function inserted by Swift 4.2 migrator.
+fileprivate func convertFromCIImageOption(_ input: CIImageOption) -> String {
+ return input.rawValue
+}
diff --git a/Filterpedia/customFilters/metalFilters/Shaders.metal b/Filterpedia/customFilters/metalFilters/Shaders.metal
old mode 100644
new mode 100755
diff --git a/Filterpedia/extensions/Extensions.swift b/Filterpedia/extensions/Extensions.swift
old mode 100644
new mode 100755
index bf3c213..83725d7
--- a/Filterpedia/extensions/Extensions.swift
+++ b/Filterpedia/extensions/Extensions.swift
@@ -11,7 +11,7 @@ import UIKit
extension UIBezierPath
{
- func interpolatePointsWithHermite(interpolationPoints : [CGPoint])
+ func interpolatePointsWithHermite(_ interpolationPoints : [CGPoint])
{
let n = interpolationPoints.count - 1
@@ -21,7 +21,7 @@ extension UIBezierPath
if ii == 0
{
- self.moveToPoint(interpolationPoints[0])
+ self.move(to: interpolationPoints[0])
}
var nextii = (ii + 1) % interpolationPoints.count
@@ -64,7 +64,7 @@ extension UIBezierPath
let controlPoint2 = CGPoint(x: currentPoint.x - mx / 3.0, y: currentPoint.y - my / 3.0)
- self.addCurveToPoint(endPoint, controlPoint1: controlPoint1, controlPoint2: controlPoint2)
+ self.addCurve(to: endPoint, controlPoint1: controlPoint1, controlPoint2: controlPoint2)
}
}
}
@@ -86,7 +86,7 @@ extension CIVector
for i in 0 ..< self.count
{
- returnArray.append(self.valueAtIndex(i))
+ returnArray.append(self.value(at: i))
}
return returnArray
@@ -98,7 +98,7 @@ extension CIVector
for i in 0 ..< self.count
{
- sum += self.valueAtIndex(i)
+ sum += self.value(at: i)
}
if sum == 0
@@ -110,31 +110,31 @@ extension CIVector
for i in 0 ..< self.count
{
- normalizedValues.append(self.valueAtIndex(i) / sum)
+ normalizedValues.append(self.value(at: i) / sum)
}
return CIVector(values: normalizedValues,
count: normalizedValues.count)
}
- func multiply(value: CGFloat) -> CIVector
+ func multiply(_ value: CGFloat) -> CIVector
{
let n = self.count
var targetArray = [CGFloat]()
for i in 0 ..< n
{
- targetArray.append(self.valueAtIndex(i) * value)
+ targetArray.append(self.value(at: i) * value)
}
return CIVector(values: targetArray, count: n)
}
- func interpolateTo(target: CIVector, value: CGFloat) -> CIVector
+ func interpolateTo(_ target: CIVector, value: CGFloat) -> CIVector
{
return CIVector(
- x: self.X + ((target.X - self.X) * value),
- y: self.Y + ((target.Y - self.Y) * value))
+ x: self.x + ((target.x - self.x) * value),
+ y: self.y + ((target.y - self.y) * value))
}
}
diff --git a/Filterpedia/overlayWidgets/OverlayWidgets.swift b/Filterpedia/overlayWidgets/OverlayWidgets.swift
old mode 100644
new mode 100755
index b4cf447..f789d82
--- a/Filterpedia/overlayWidgets/OverlayWidgets.swift
+++ b/Filterpedia/overlayWidgets/OverlayWidgets.swift
@@ -10,12 +10,12 @@ import UIKit
protocol FilterAttributesDisplayable
{
- func setFilter(filter: CIFilter)
+ func setFilter(_ filter: CIFilter)
}
class OverlayWidgets
{
- static func getOverlayWidgetForFilter(filterName: String) -> FilterAttributesDisplayable?
+ static func getOverlayWidgetForFilter(_ filterName: String) -> FilterAttributesDisplayable?
{
switch filterName
{
@@ -38,25 +38,25 @@ class OverlayWidgets
class ToneCurveWidget: UIView, FilterAttributesDisplayable
{
- let toneCurveLayer = curveLayer(strokeColor: UIColor.whiteColor().CGColor)
+ let toneCurveLayer = curveLayer(strokeColor: UIColor.white.cgColor)
- func setFilter(filter: CIFilter)
+ func setFilter(_ filter: CIFilter)
{
- if let inputPoint0 = filter.valueForKey("inputPoint0") as? CIVector,
- inputPoint1 = filter.valueForKey("inputPoint1") as? CIVector,
- inputPoint2 = filter.valueForKey("inputPoint2") as? CIVector,
- inputPoint3 = filter.valueForKey("inputPoint3") as? CIVector,
- inputPoint4 = filter.valueForKey("inputPoint4") as? CIVector
+ if let inputPoint0 = filter.value(forKey: "inputPoint0") as? CIVector,
+ let inputPoint1 = filter.value(forKey: "inputPoint1") as? CIVector,
+ let inputPoint2 = filter.value(forKey: "inputPoint2") as? CIVector,
+ let inputPoint3 = filter.value(forKey: "inputPoint3") as? CIVector,
+ let inputPoint4 = filter.value(forKey: "inputPoint4") as? CIVector
{
let points = [inputPoint0, inputPoint1, inputPoint2, inputPoint3, inputPoint4].map
{
- CGPoint(x: $0.X * frame.width, y: (1 - $0.Y) * frame.height)
+ CGPoint(x: $0.x * frame.width, y: (1 - $0.y) * frame.height)
}
let path = UIBezierPath()
path.interpolatePointsWithHermite(points)
- toneCurveLayer.path = path.CGPath
+ toneCurveLayer.path = path.cgPath
}
else
{
@@ -90,7 +90,7 @@ class RGBChannelToneCurveWidget: UIView, FilterAttributesDisplayable
let greenLayer: CAShapeLayer
let blueLayer: CAShapeLayer
- private var rgbChannelToneCurve: RGBChannelToneCurve?
+ fileprivate var rgbChannelToneCurve: RGBChannelToneCurve?
{
didSet
{
@@ -105,7 +105,7 @@ class RGBChannelToneCurveWidget: UIView, FilterAttributesDisplayable
}
}
- static func pathForValues(values: CIVector, frame: CGRect) -> CGPathRef
+ static func pathForValues(_ values: CIVector, frame: CGRect) -> CGPath
{
let xValues: [CGFloat] = [0, 0.25, 0.5, 0.75, 1.0]
@@ -117,10 +117,10 @@ class RGBChannelToneCurveWidget: UIView, FilterAttributesDisplayable
let path = UIBezierPath()
path.interpolatePointsWithHermite(points)
- return path.CGPath
+ return path.cgPath
}
- func setFilter(filter: CIFilter)
+ func setFilter(_ filter: CIFilter)
{
if let rgbChannelToneCurve = filter as? RGBChannelToneCurve
{
@@ -130,9 +130,9 @@ class RGBChannelToneCurveWidget: UIView, FilterAttributesDisplayable
override init(frame: CGRect)
{
- redLayer = curveLayer(strokeColor: UIColor.redColor().CGColor)
- greenLayer = curveLayer(strokeColor: UIColor.greenColor().CGColor)
- blueLayer = curveLayer(strokeColor: UIColor.blueColor().CGColor)
+ redLayer = curveLayer(strokeColor: UIColor.red.cgColor)
+ greenLayer = curveLayer(strokeColor: UIColor.green.cgColor)
+ blueLayer = curveLayer(strokeColor: UIColor.blue.cgColor)
super.init(frame: frame)
@@ -163,7 +163,7 @@ class CMYKChannelToneCurveWidget: UIView, FilterAttributesDisplayable
let yellowLayer: CAShapeLayer
let blackLayer: CAShapeLayer
- private var cmykToneCurves: CMYKToneCurves?
+ fileprivate var cmykToneCurves: CMYKToneCurves?
{
didSet
{
@@ -179,7 +179,7 @@ class CMYKChannelToneCurveWidget: UIView, FilterAttributesDisplayable
}
}
- static func pathForValues(values: CIVector, frame: CGRect) -> CGPathRef
+ static func pathForValues(_ values: CIVector, frame: CGRect) -> CGPath
{
let xValues: [CGFloat] = [0, 0.25, 0.5, 0.75, 1.0]
@@ -191,10 +191,10 @@ class CMYKChannelToneCurveWidget: UIView, FilterAttributesDisplayable
let path = UIBezierPath()
path.interpolatePointsWithHermite(points)
- return path.CGPath
+ return path.cgPath
}
- func setFilter(filter: CIFilter)
+ func setFilter(_ filter: CIFilter)
{
if let cmykToneCurves = filter as? CMYKToneCurves
{
@@ -204,10 +204,10 @@ class CMYKChannelToneCurveWidget: UIView, FilterAttributesDisplayable
override init(frame: CGRect)
{
- cyanLayer = curveLayer(strokeColor: UIColor.cyanColor().CGColor)
- magentaLayer = curveLayer(strokeColor: UIColor.magentaColor().CGColor)
- yellowLayer = curveLayer(strokeColor: UIColor.yellowColor().CGColor)
- blackLayer = curveLayer(strokeColor: UIColor.blackColor().CGColor)
+ cyanLayer = curveLayer(strokeColor: UIColor.cyan.cgColor)
+ magentaLayer = curveLayer(strokeColor: UIColor.magenta.cgColor)
+ yellowLayer = curveLayer(strokeColor: UIColor.yellow.cgColor)
+ blackLayer = curveLayer(strokeColor: UIColor.black.cgColor)
super.init(frame: frame)
@@ -233,7 +233,7 @@ class CMYKChannelToneCurveWidget: UIView, FilterAttributesDisplayable
// MARK: Helper functions
-func curveLayer(strokeColor color: CGColorRef) -> CAShapeLayer
+func curveLayer(strokeColor color: CGColor) -> CAShapeLayer
{
let layer = CAShapeLayer()
@@ -243,7 +243,7 @@ func curveLayer(strokeColor color: CGColorRef) -> CAShapeLayer
layer.fillColor = nil
layer.lineWidth = 3
- layer.shadowColor = UIColor.grayColor().CGColor
+ layer.shadowColor = UIColor.gray.cgColor
layer.shadowOffset = CGSize(width: 0, height: 0)
layer.shadowOpacity = 1
layer.shadowRadius = 3