code:
import SwiftUI
import CoreImage
import CoreImage.CIFilterBuiltins
struct EdgeWorkDemo: View {
let context = CIContext()
var body: some View {
VStack {
if let outputImage = applyEdgeWorkFilter() {
Image(uiImage: outputImage)
.resizable()
.scaledToFit()
} else {
Text("No Image")
}
}
}
func applyEdgeWorkFilter() -> UIImage? {
guard let inputImage = UIImage(named: "imgBG") else {
print("
return nil
}
guard let ciImage = CIImage(image: inputImage) else {
print("
return nil
}
let edgeWorkFilter = CIFilter.edgeWork()
edgeWorkFilter.inputImage = ciImage
edgeWorkFilter.radius = 40 // area of effect
guard let resultImage = edgeWorkFilter.outputImage else {
print("
return nil
}
let context = CIContext()
if let cgImage = context.createCGImage(resultImage, from: resultImage.extent) {
return UIImage(cgImage: cgImage)
}
print("
return nil
}
}
struct EdgeWorkDemo_Previews: PreviewProvider {
static var previews: some View {
EdgeWorkDemo()
}
}
< /code>
Что я попробовал: < /strong> < /p>
подтвердил, что «imgbg» присутствует в Каталог активов. Избегайте прозрачных ребра.
выполняется как на симуляторе, так и на реальном устройстве. фильтр для извлечения краев из изображения, аналогично тому, как он описан в документации:
Apple Docs - ciedgework.
Вопрос: < /p>
Почему Ciedgework возвращает пустое изображение? li>
Есть ли альтернативный способ достижения аналогичного эффекта?
Мое изображение
Подробнее здесь: https://stackoverflow.com/questions/794 ... lank-image
Мобильная версия