我正在为macOS写一个Swift应用程序,它可以叠加图像.
我试着创建一个小项目来读取一幅图像,并将其写入1000次.
我使用DispatchQueue.全局,使UI可以自由显示操作编号.
如果你有任何 idea ;)
谢谢
代码如下:
import SwiftUI
struct ContentView: View {
@State private var presentImageImporter = false
@State private var runningComputation = 1
@State private var inputImage: NSImage?
var body: some View {
VStack {
Button("Image") {
presentImageImporter = true
}.fileImporter(isPresented: $presentImageImporter, allowedContentTypes: [.png, .jpeg]) { result in
switch result {
case .success(let url):
if url.startAccessingSecurityScopedResource() {
inputImage = NSImage(byReferencing: url)
url.stopAccessingSecurityScopedResource()
}
case .failure(let error):
print(error)
}
}
Button("Compute 1000 read image") {
runComputations()
}
Divider()
Text("\(runningComputation)")
Divider()
}.frame(minWidth: 200, minHeight: 200)
}
func runComputations() {
let downloadDir = try! FileManager.default.url(
for: FileManager.SearchPathDirectory.downloadsDirectory,
in: FileManager.SearchPathDomainMask.userDomainMask,
appropriateFor: nil,
create: true)
let subFolder = downloadDir.appendingPathComponent("toto")
try! FileManager.default.createDirectory(at: subFolder, withIntermediateDirectories: true)
DispatchQueue.global(qos: .userInitiated).async {
for i in 0...1000 {
writePNG(inputImage!, url: subFolder.appendingPathComponent("image\(i).png"))
runningComputation += 1
}
}
}
}
func writePNG(_ image: NSImage, url: URL) {
let newRep = NSBitmapImageRep(data: image.tiffRepresentation!)
newRep!.size = image.size
let pngData = newRep!.representation(using: .png, properties: [:])
do {
try pngData!.write(to: url)
} catch {
print(error)
}
}
和跟踪图像