В настоящее время я пытаюсь заполнить коллекцию с изображением, которое фильтруется различными CIFilters. Я использовал метод яблок для получения массива фильтров.iOS CIFilters, которые на самом деле работают?
let filterNames = CIFilter.filterNamesInCategories([kCICategoryStillImage,kCICategoryBuiltIn])
Я думал, что это должно дать мне все фильтры, которые применимы к неподвижным изображениям на iPhone. Но это не работает.
Это есть (некоторые) из фильтров я получаю из приведенной выше методы:
["CIAccordionFoldTransition", "CIAdditionCompositing", "CIAffineClamp", "CIAffineTile", "CIAffineTransform", "CIAreaAverage", "CIAreaHistogram", "CIAreaMaximum", "CIAreaMaximumAlpha", "CIAreaMinimum", "CIAreaMinimumAlpha", "CIAztecCodeGenerator", "CIBarsSwipeTransition", "CIBlendWithAlphaMask", "CIBlendWithMask", "CIBloom", "CIBoxBlur", "CIBumpDistortion", "CIBumpDistortionLinear", "CICheckerboardGenerator", "CICircleSplashDistortion", "CICircularScreen", "CICircularWrap", "CICMYKHalftone",
плюс намного больше.
применяют фильтры с помощью этого метода:
func applyFilter(image: UIImage, filterName: String) -> UIImage {
let beginImage = CIImage(CGImage: image.CGImage!)
let filter = CIFilter(name: filterName)!
filter.setValue(beginImage, forKey: kCIInputImageKey)
filter.setDefaults()
let context = CIContext(options: nil)
let imageRef = context.createCGImage(filter.outputImage!, fromRect: beginImage.extent)
let newImage = UIImage(CGImage: imageRef)
return newImage
}
Первых два фильтра не будет работать, потому что полученное изображение является нулевым, то некоторыми работами, а затем я получаю:
[<CIAztecCodeGenerator 0x7fb89c775460> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key inputImage.'
*** First throw call stack:
(
0 CoreFoundation 0x000000010cd5de65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010efebdeb objc_exception_throw + 48
2 CoreFoundation 0x000000010cd5daa9 - [NSException raise] + 9
3 CoreImage 0x000000010d33eea2 -[CIFilter setValue:forUndefinedKey:] + 137
4 CoreImage 0x000000010d4093ce -[CIAztecCodeGenerator setValue:forUndefinedKey:] + 335
5 Foundation 0x000000010d6749bb -[NSObject(NSKeyValueCoding) setValue:forKey:] + 288
6 DrawIt 0x000000010cb55088 _TFC6DrawIt25applyFilterViewController11applyFilterfS0_FTCSo7UIImage10filterNameSS_S1_ + 552
7 DrawIt 0x000000010cb54b52 _TFC6DrawIt25applyFilterViewController14collectionViewfS0_FTCSo16UICollectionView22cellForItemAtIndexPathCSo11NSIndexPath_CSo20UICollectionViewCell + 1186
8 DrawIt 0x000000010cb54e3f _TToFC6DrawIt25applyFilterViewController14collectionViewfS0_FTCSo16UICollectionView22cellForItemAtIndexPathCSo11NSIndexPath_CSo20UICollectionViewCell + 79
9 UIKit 0x000000010e31d5ba -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:] + 483
10 UIKit 0x000000010e31fae0 -[UICollectionView _updateVisibleCellsNow:] + 4431
11 UIKit 0x000000010e32423b -[UICollectionView layoutSubviews] + 247
12 UIKit 0x000000010db7f4a3 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703
13 QuartzCore 0x0000000113d0059a -[CALayer layoutSublayers] + 146
14 QuartzCore 0x0000000113cf4e70 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
15 QuartzCore 0x0000000113cf4cee _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
16 QuartzCore 0x0000000113ce9475 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277
17 QuartzCore 0x0000000113d16c0a _ZN2CA11Transaction6commitEv + 486
18 QuartzCore 0x0000000113d259f4 _ZN2CA7Display11DisplayLink14dispatch_itemsEyyy + 576
19 CoreFoundation 0x000000010ccbdc84 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
20 CoreFoundation 0x000000010ccbd831 __CFRunLoopDoTimer + 1089
21 CoreFoundation 0x000000010cc7f241 __CFRunLoopRun + 1937
22 CoreFoundation 0x000000010cc7e828 CFRunLoopRunSpecific + 488
23 GraphicsServices 0x0000000113bc8ad2 GSEventRunModal + 161
24 UIKit 0x000000010dac8610 UIApplicationMain + 171
25 DrawIt 0x000000010cb569fd main + 109
26 libdyld.dylib 0x000000010faf492d start + 1
27 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
I не проверял все остальные фильтры. Я думал, что массив ДОЛЖЕН содержать только флитеры, которые применимы легко. Это неправильный код или массив фильтров, которые я использую?
Но, к примеру, первый фильтр (CIAccordionFoldTransition) кажется переходным, а не фильтром. Таким образом, имеет смысл, что он имеет нулевое значение.
Есть ли способ получить все фильтры, которые применимы к одной картинке именно так?
Я довольно свежий в iOs, и я надеюсь, что мой вопрос не глуп для этой домашней страницы, будьте добрыми! Поздравления и благодарности.
Спасибо большое, будет пытаться это! Например, сложение аккордеона имеет входное изображение, но я предполагаю, что он не имеет Output (is nil), потому что это переход, есть ли способ проверить это? Поскольку ключ есть, он просто ничего не возвращает. Может быть, я должен скомпилировать свой собственный массив с рабочим фильтром, используя некоторые уловы? – Marcel
yup спасибо большое ваше решение держит вне одну ошибку, но я наклоняю, кажется, найти любой список или объяснение, что фильтр делает то, что ... Я просто могу попробовать их .. – Marcel
[Ссылка на основной фильтр] (https: // developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/uid/TP40004346) (выпуск iOS). –