こんな感じ。
ぼかし画像を作るために Accelerate.framework(vImage)を使用している。
この辺り、使い方も参考になる。
DKLivewBlurView.m
- (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur { : vImage_Buffer inBuffer, outBuffer; vImage_Error error; void *pixelBuffer; CGDataProviderRef inProvider = CGImageGetDataProvider(img); CFDataRef inBitmapData = CGDataProviderCopyData(inProvider); inBuffer.width = CGImageGetWidth(img); inBuffer.height = CGImageGetHeight(img); inBuffer.rowBytes = CGImageGetBytesPerRow(img); inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData); pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img)); : error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend); :オリジナル画像をセットしたタイミングで非同期にこれを呼び出してあらかじめぼかし画像を作っておく。
- (void)setOriginalImage:(UIImage *)originalImage { _originalImage = originalImage; self.image = originalImage; dispatch_queue_t queue = dispatch_queue_create("Blur queue", NULL); dispatch_async(queue, ^ { UIImage *blurredImage = [self blurryImage: self.originalImage withBlurLevel: self.initialBlurLevel]; dispatch_async(dispatch_get_main_queue(), ^{ self.backgroundImageView.alpha = 0.0; self.backgroundImageView.image = blurredImage; }); });
0 件のコメント:
コメントを投稿