麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

iOS開發日記2-虛化,模糊效果

2019-11-14 18:31:36
字體:
來源:轉載
供稿:網友

今天博主有一個虛化,模糊效果的需求,遇到了一些困難點,在此和大家分享,希望能夠共同進步.

 模糊效果,顧名思義,是將你的背景圖片進行虛化,模糊,進而在背景圖片上增加一些不虛化,不模糊的button等等,從而達到一種吸引用戶眼球的效果,通常稱之為焦點效應.開發過程中,產生模糊效果的方法很多,下面為大家簡單進行介紹.

1.最簡單的方法.

你去找你的UI,設計一張毛玻璃效果的圖片,貼上去,大功告成,模糊效果產生了.簡單,易用.但是如果你想學習更多的知識,想通過代碼的方式產生模糊效果,我們繼續.

2.CoreImage.

coreImage是IOS5中新加入的一個Objective-c的框架,提供了強大高效的圖像處理功能,用來對基于像素的圖像進行操作與分析。iOS提供了很多強大的濾鏡(Filter),現在有127種之多,隨著框架的更新,這一數字會繼續增加。這些Filter提供了各種各樣的效果,并且還可以通過濾鏡鏈將各種效果的Filter疊加起來,形成強大的自定義效果,如果你對該效果很滿意,還可以子類化濾鏡。下面將代碼貼在下面,與大家分享,如果對框架不熟悉,建議閱讀蘋果的官方API.

        CIContext *context = [CIContext contextWithOptions:nil];

        CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"[email protected]"]];

        CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];

        [filter setValue:inputImage forKey:kCIInputImageKey];

        [filter setValue:[NSNumber numberWithFloat:10.0] forKey:@"inputRadius"];

//        CIImage *result = [filter valueForKey:kCIOutputImageKey];

            CIImage *result=[filter outputImage];

        CGImageRef cgImage = [context createCGImage:result fromRect:[inputImage extent]];

        UIImage *image = [UIImage imageWithCGImage:cgImage];

        CGImageRelease(cgImage);

        self.imgView.image=image;

簡單易用,推薦使用

 3.vImage

如果你對性能有極大的追求,那么vImage會適合你,iOS5.0中新增了vImage API可以使用,它屬于Accelerate.Framework,所以如果你要使用它要在工程中加入這個Framework。模糊算法使用的是vImageBoxConvolve_ARGB8888這個函數.

- (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;  

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));  

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;  

}

4.第三方庫

可以在網上找到一些不錯的第三方庫,產生模糊效果.但是個人不推薦使用,斷更永遠是第三方庫最大的詬病.

5.8.0新開放API

在評論區看到大神@ZweiZhao的代碼,發現開放了新的API,十分感謝.在這里加上注釋,與大家分享.

 
iOS 8 后更新的  UIBlurEffect類和 UIVisualEffectView類使這種特效應用更加便捷,高效.使用也非常簡便,UIBlurEffect 類是設定毛玻璃特效的類型,UIVisualEffectView類在創建時加入上一個類對象,剩下的跟普通的view 控件等用法就一樣了.

   //  創建需要的毛玻璃特效類型

    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

    //  毛玻璃view 視圖

    UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

    //添加到要有毛玻璃特效的控件中

    effectView.frame = self.imageV.bounds;

    [self.imageV addSubview:effectView];

    //設置模糊透明度

    effectView.alpha = .8f;

 

http://blog.sina.cn/dpool/blog/s/blog_92ac2c5b0101cm5b.html?plg_nld=1&plg_uin=1&plg_auth=1&vt=4&plg_usr=1&plg_nld=1&plg_vkey=1&plg_dev=1

http://www.companysz.com/kenshincui/p/3959951.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 31freehdxxxx欧美 | 成人在线精品视频 | 久久精品亚洲国产奇米99 | 毛片视频大全 | 国产美女做爰免费视 | 韩国一大片a毛片 | 国人精品视频在线观看 | 成码无人av片在线观看网站 | 欧美一级成人一区二区三区 | 黄色网址在线视频 | 黄色网欧美 | 国产亚洲精品久久久久久网站 | 成人一级黄色 | 久久国产免费视频 | 久久久国产精品免费观看 | 福利在线免费 | 久久国产精品影视 | 国产九色在线观看 | 毛片在线免费播放 | 二级大黄大片高清在线视频 | 国产一区二区三区在线免费观看 | 日韩激情一区二区三区 | h视频在线观看免费 | av在线免费网 | 黄色成人小视频 | h视频免费在线观看 | 成人精品aaaa网站 | 成人啪啪18免费网站 | 免费国产之a视频 | 九九热九九爱 | 草草久久久 | 精品久久久久久久久久 | 久久影院在线观看 | 国产精品免费一区二区三区四区 | 国产精品99久久99久久久二 | 羞羞网站| 久久精品视频日本 | 国产精品亚洲一区二区三区在线观看 | 国产精品视频在 | 日韩色视频 | 精品亚洲二区 |