生活随笔
收集整理的這篇文章主要介紹了
iOS毛玻璃
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有一個任務做一個毛玻璃效果,基本上是仿照twitter上面做的,UIScrollView下拉的時候,使圖像變得模糊。
這個方法用到的是Accelerate.framework中的vImageBoxConvolve_ARGB8888方法,他是首先 把圖像轉化成jpg格式的,然后進行m*n分隔,在進行模糊等效果的處理。
下面是方法的源碼:
?
[objc]?view plaincopyprint?
-?(UIImage?*)blurryImage:(UIImage?*)image?withBlurLevel:(CGFloat)blur?{??????if?(blur?<?0.f?||?blur?>?1.f)?{??????????blur?=?0.5f;??????}??????int?boxSize?=?(int)(blur?*?100);??????boxSize?=?boxSize?-?(boxSize?%?2)?+?1;????????????CGImageRef?img?=?image.CGImage;????????????vImage_Buffer?inBuffer,?outBuffer;??????vImage_Error?error;????????????voidvoid?*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));????????????if(pixelBuffer?==?NULL)??????????NSLog(@"No?pixelbuffer");????????????outBuffer.data?=?pixelBuffer;??????outBuffer.width?=?CGImageGetWidth(img);??????outBuffer.height?=?CGImageGetHeight(img);??????outBuffer.rowBytes?=?CGImageGetBytesPerRow(img);????????????error?=?vImageBoxConvolve_ARGB8888(&inBuffer,?????????????????????????????????????????&outBuffer,?????????????????????????????????????????NULL,?????????????????????????????????????????0,?????????????????????????????????????????0,?????????????????????????????????????????boxSize,?????????????????????????????????????????boxSize,?????????????????????????????????????????NULL,?????????????????????????????????????????kvImageEdgeExtend);??????????????????if?(error)?{??????????NSLog(@"error?from?convolution?%ld",?error);??????}????????????CGColorSpaceRef?colorSpace?=?CGColorSpaceCreateDeviceRGB();??????CGContextRef?ctx?=?CGBitmapContextCreate(???????????????????????????????????????????????outBuffer.data,???????????????????????????????????????????????outBuffer.width,???????????????????????????????????????????????outBuffer.height,???????????????????????????????????????????????8,???????????????????????????????????????????????outBuffer.rowBytes,???????????????????????????????????????????????colorSpace,???????????????????????????????????????????????kCGImageAlphaNoneSkipLast);??????CGImageRef?imageRef?=?CGBitmapContextCreateImage?(ctx);??????UIImage?*returnImage?=?[UIImage?imageWithCGImage:imageRef];????????????//clean?up??????CGContextRelease(ctx);??????CGColorSpaceRelease(colorSpace);????????????free(pixelBuffer);??????CFRelease(inBitmapData);????????????CGColorSpaceRelease(colorSpace);??????CGImageRelease(imageRef);????????????return?returnImage;??}??
這個方法中有兩個參數,第一個參數就不說了,第二個參數可以理解為模糊度,取值為【0 1】,越靠近1就越模糊。
?
下面是使用此方法的源碼:
?
[objc]?view plaincopyprint?
NSString?*?path?=?[[NSBundle?mainBundle]?pathForResource:@"2009153523meinv2"?ofType:@"jpg"];????UIImage?*?image?=?[UIImage?imageWithContentsOfFile:path];????UIImage?*?image1?=?[self?blurryImage:image?withBlurLevel:0.1];????self.imageView.image?=?image1;??
效果如下:
?
下面那張圖片是處理過得,上面這張圖片是沒有經過處理的。
總結
以上是生活随笔為你收集整理的iOS毛玻璃的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。