日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS毛玻璃

發布時間:2024/1/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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毛玻璃的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。