Skip to content

Commit 666253b

Browse files
committed
async methods added
1 parent ee4ea43 commit 666253b

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

Sources/iOSIntPackage/ImageProcessor.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public struct ImageProcessor {
1313

1414
public init() {}
1515

16+
// применение фильтра к изображению в главном потоке, не требует явного вызова DispatchQueue.main при работе с UI
1617
public func processImage(
1718
sourceImage: UIImage,
1819
filter: ColorFilter,
@@ -24,6 +25,18 @@ public struct ImageProcessor {
2425
handler: completion)
2526
}
2627

28+
// применение фильтра к изображению в параллельном потоке, требует явного вызова DispatchQueue.main при работе с UI
29+
public func processImageAsync(
30+
sourceImage: UIImage,
31+
filter: ColorFilter,
32+
completion: @escaping (CGImage?) -> Void
33+
) {
34+
applyFilterAsync(
35+
filter: filter,
36+
image: sourceImage,
37+
handler: completion)
38+
}
39+
2740
private func applyFilter(
2841
filter: ColorFilter,
2942
image: UIImage,
@@ -46,4 +59,29 @@ public struct ImageProcessor {
4659
) else { fatalError("Error creating output image") }
4760
handler(UIImage(cgImage: outputImage))
4861
}
62+
63+
private func applyFilterAsync(
64+
filter: ColorFilter,
65+
image: UIImage,
66+
handler: @escaping (CGImage?) -> Void
67+
) {
68+
DispatchQueue.global(qos: .userInitiated).async {
69+
let context = CIContext()
70+
guard let source = CIImage(image: image) else { fatalError("Error creating source image") }
71+
var params = filter.parameters
72+
params[ColorFilter.imageKey] = source
73+
guard let filter = CIFilter(
74+
name: filter.filterName,
75+
parameters: params
76+
) else { fatalError("Error creating filter") }
77+
78+
guard let filteredImage = filter.outputImage else { fatalError("Error filtering image") }
79+
80+
guard let outputImage = context.createCGImage(
81+
filteredImage,
82+
from: filteredImage.extent
83+
) else { fatalError("Error creating output image") }
84+
handler(outputImage)
85+
}
86+
}
4987
}

0 commit comments

Comments
 (0)