iOS 11 関連記事
iOS 11 UIKit の変更点 - ObjecTips
iOS 11 Foundation の変更点 - ObjecTips
iOS 11 Messages Framework の変更点 - ObjecTips
iOS 11 PDFKit - ObjecTips
Vision Framework でテキスト検出 Text Detection - ObjecTips
Vision Framework で水平角検出(傾き) Horizon Detection - ObjecTips
Core Image
CIImage - Core Image | Apple Developer Documentation
CIImage
@property (nonatomic, readonly, nullable) AVDepthData *depthData NS_AVAILABLE(10_13,11_0);
Depthデータの取得。
イニシャライザのオプションで kCIImageAuxiliaryDepth
か kCIImageAuxiliaryDisparity
のどちらかを YES
に設定すると取得出来るらしい。このオプションを用いるとプライマリの画像の代わりに補助(auxiliary)画像の CIImage が作られて、もし補助画像が無い場合は nil になってしまうらしい。
補助画像は half float のモノクロ画像との事。
/* Returns a new image by changing the receiver's sample mode to bilinear interpolation. */ - (CIImage *)imageBySamplingLinear NS_AVAILABLE(10_13, 11_0) NS_SWIFT_NAME(samplingLinear()); /* Returns a new image by changing the receiver's sample mode to nearest neighbor. */ - (CIImage *)imageBySamplingNearest NS_AVAILABLE(10_13, 11_0) NS_SWIFT_NAME(samplingNearest());
画像の補間モードをバイリニア補間(bilinear interpolation)とニアレストネイバー(nearest neighbor)という補間方法に変換してくれるらしい。
CIFIlter
iOS 11 で追加された CIFIlter
CIAreaMinMaxRed CIAttributedTextImageGenerator CIBarcodeGenerator CIBicubicScaleTransform CIBokehBlur CIColorCubesMixedWithMask CIColorCurves CIDepthBlurEffect CIDepthToDisparity CIDisparityToDepth CIEdgePreserveUpsampleFilter CILabDeltaE CITextImageGenerator
DepthToDisparity と DepthToDisparity が存在していて Depth と Disparity の相互変換が出来るという事が分かる。
CIContext
- (nullable NSData*) PNGRepresentationOfImage:(CIImage*)image format:(CIFormat)format colorSpace:(CGColorSpaceRef)colorSpace options:(NSDictionary*)options NS_AVAILABLE(10_13,11_0); - (nullable NSData*) HEIFRepresentationOfImage:(CIImage*)image format:(CIFormat)format colorSpace:(CGColorSpaceRef)colorSpace options:(NSDictionary*)options NS_AVAILABLE(10_13,11_0); - (BOOL) writePNGRepresentationOfImage:(CIImage*)image toURL:(NSURL*)url format:(CIFormat)format colorSpace:(CGColorSpaceRef)colorSpace options:(NSDictionary*)options error:(NSError **)errorPtr NS_AVAILABLE(10_13,11_0); - (BOOL) writeHEIFRepresentationOfImage:(CIImage*)image toURL:(NSURL*)url format:(CIFormat)format colorSpace:(CGColorSpaceRef)colorSpace options:(NSDictionary*)options error:(NSError **)errorPtr NS_AVAILABLE(10_12,10_0);
これまではTIFFとJPEGに書き出す事が可能だったのが、PNGとHEIFへの書き出しも可能になった。
CORE_IMAGE_EXPORT NSString * const kCIImageRepresentationAVDepthData NS_AVAILABLE(10_13,11_0); CORE_IMAGE_EXPORT NSString * const kCIImageRepresentationDepthImage NS_AVAILABLE(10_13,11_0); CORE_IMAGE_EXPORT NSString * const kCIImageRepresentationDisparityImage NS_AVAILABLE(10_13,11_0);
上記の書き出しメソッドにオプションとして指定する事が出来る。ただしヘッダによればTIFFとPNGはオプション指定が不可で、JPEGとHEIFの場合にこれらのオプションが指定可能らしい。
CIRenderTask, CIRenderDestination, CIRenderInfo
非同期レンダリングのためのクラス群
CIRenderTask
には
- (nullable CIRenderInfo*) waitUntilCompletedAndReturnError:(NSError**)error;
というメソッドがあるので同期的にも使えそう。
CIKernel
+ (nullable instancetype)kernelWithFunctionName:(NSString *)name fromMetalLibraryData:(NSData *)data error:(NSError **)error NS_AVAILABLE(10_13, 11_0); + (nullable instancetype)kernelWithFunctionName:(NSString *)name fromMetalLibraryData:(NSData *)data outputPixelFormat:(CIFormat)format error:(NSError **)error NS_AVAILABLE(10_13, 11_0);
data には Core Image Standard Library でコンパイルされた mtallib ファイルのデータ、name には Metal Shading Language で書かれた関数名が必要らしい。
CIBlendKernel
2つの画像をブレンドする CIColorKernel
のプリセット群の様なものが用意された。
例えば
@property (class, strong, readonly) CIBlendKernel *componentAdd; @property (class, strong, readonly) CIBlendKernel *componentMultiply;
などクラスプロパティで簡易的にカーネル処理の色フィルタを呼び出す事が出来る。その数50個
CIBarcodeDescriptor
バーコードデータのモデルクラスでサブクラスとして以下が存在する。
- CIQRCodeDescriptor
- CIAztecCodeDescriptor
- CIPDF417CodeDescriptor
- CIDataMatrixCodeDescriptor
バーコードの生成と、Core Image, Vision, AVFoundation でのバーコードの検出で使用されるとの事。
CIQRCodeFeature
@property (nullable, readonly) CIQRCodeDescriptor *symbolDescriptor NS_AVAILABLE(10_13, 11_0);
前述のバーコードのモデルクラスを取得可能。
感想
CIBlendKernel
のプリセット呼び出しは簡単だけど CIFilter
のカラーブレンド系とパフォーマンスが違うのか気になる。呼び出し型が違うだけで中の処理は同じではないか?とも思う。
HEIFデータの扱いとか AVDepthData
の活用とかはしらばくは2眼カメラの iPhone 7 Plus に限定されてしまうかも知れないけど面白そう。このあたりの詳細は AVFoundation を調べる必要がありそう。