亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS7實(shí)現(xiàn)毛玻璃特效代碼

2020-02-19 15:57:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

原圖:

效果圖:

?實(shí)現(xiàn):
首先需要導(dǎo)入Accelerate.framework。
然后把兩個(gè)文件加入到自己的項(xiàng)目中即可。
UIImage+ImageEffects.h

?


#import
@interfaceUIImage(ImageEffects)
-(UIImage*)applyLightEffect;
-(UIImage*)applyExtraLightEffect;
-(UIImage*)applyDarkEffect;
-(UIImage*)applyTintEffectWithColor:(UIColor*)tintColor;
-(UIImage*)applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor*)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage*)maskImage;
@end

?

UIImage+ImageEffects.m

?


#import "UIImage+ImageEffects.h"
#import
#import
@implementationUIImage(ImageEffects)
-(UIImage*)applyLightEffect
{
UIColor*tintColor =[UIColor colorWithWhite:1.0 alpha:0.3];
return[self applyBlurWithRadius:30 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil];
}
-(UIImage*)applyExtraLightEffect
{
UIColor*tintColor =[UIColor colorWithWhite:0.97 alpha:0.82];
return[self applyBlurWithRadius:20 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil];
}
-(UIImage*)applyDarkEffect
{
UIColor*tintColor =[UIColor colorWithWhite:0.11 alpha:0.73];
return[self applyBlurWithRadius:20 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil];
}
-(UIImage*)applyTintEffectWithColor:(UIColor*)tintColor
{
constCGFloatEffectColorAlpha=0.6;
UIColor*effectColor = tintColor;
int componentCount =CGColorGetNumberOfComponents(tintColor.CGColor);
if(componentCount ==2){
CGFloat b;
if([tintColor getWhite:&b alpha:NULL]){
effectColor =[UIColor colorWithWhite:b alpha:EffectColorAlpha];
}
}
else{
CGFloat r, g, b;
if([tintColor getRed:&r green:&g blue:&b alpha:NULL]){
effectColor =[UIColor colorWithRed:r green:g blue:b alpha:EffectColorAlpha];
}
}
return[self applyBlurWithRadius:10 tintColor:effectColor saturationDeltaFactor:-1.0 maskImage:nil];
}
-(UIImage*)applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor*)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage*)maskImage
{
// Check pre-conditions.
if(self.size.width NSLog(@"*** error: invalid size: (%.2f x %.2f). Both dimensions must be >= 1: %@",self.size.width,self.size.height,self);
returnnil;
}
if(!self.CGImage){
NSLog(@"*** error: image must be backed by a CGImage: %@",self);
returnnil;
}
if(maskImage &&!maskImage.CGImage){
NSLog(@"*** error: maskImage must be backed by a CGImage: %@", maskImage);
returnnil;
}
CGRect imageRect ={CGPointZero,self.size };
UIImage*effectImage =self;
BOOL hasBlur = blurRadius > __FLT_EPSILON__;
BOOL hasSaturationChange = fabs(saturationDeltaFactor -1.)> __FLT_EPSILON__;
if(hasBlur || hasSaturationChange){
UIGraphicsBeginImageContextWithOptions(self.size, NO,[[UIScreen mainScreen] scale]);
CGContextRef effectInContext =UIGraphicsGetCurrentContext();
CGContextScaleCTM(effectInContext,1.0,-1.0);
CGContextTranslateCTM(effectInContext,0,-self.size.height);
CGContextDrawImage(effectInContext, imageRect,self.CGImage);
vImage_Buffer effectInBuffer;
effectInBuffer.data =CGBitmapContextGetData(effectInContext);
effectInBuffer.width =CGBitmapContextGetWidth(effectInContext);
effectInBuffer.height =CGBitmapContextGetHeight(effectInContext);
effectInBuffer.rowBytes =CGBitmapContextGetBytesPerRow(effectInContext);
UIGraphicsBeginImageContextWithOptions(self.size, NO,[[UIScreen mainScreen] scale]);
CGContextRef effectOutContext =UIGraphicsGetCurrentContext();
vImage_Buffer effectOutBuffer;
effectOutBuffer.data =CGBitmapContextGetData(effectOutContext);
effectOutBuffer.width =CGBitmapContextGetWidth(effectOutContext);
effectOutBuffer.height =CGBitmapContextGetHeight(effectOutContext);
effectOutBuffer.rowBytes =CGBitmapContextGetBytesPerRow(effectOutContext);
if(hasBlur){
// A description of how to compute the box kernel width from the Gaussian
// radius (aka standard deviation) appears in the SVG spec:
// http://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement
//
// For larger values of 's' (s >= 2.0), an approximation can be used: Three
// successive box-blurs build a piece-wise quadratic convolution kernel, which
// approximates the Gaussian kernel to within roughly 3%.
//
// let d = floor(s * 3*sqrt(2*pi)/4 + 0.5)
//
// ... if d is odd, use three box-blurs of size 'd', centered on the output pixel.
//
CGFloat inputRadius = blurRadius *[[UIScreen mainScreen] scale];
NSUInteger radius = floor(inputRadius *3.* sqrt(2* M_PI)/4+0.5);
if(radius %2!=1){
radius +=1;// force radius to be odd so that the three box-blur methodology works.
}
vImageBoxConvolve_ARGB8888(&effectInBuffer,&effectOutBuffer, NULL,0,0, radius, radius,0, kvImageEdgeExtend);
vImageBoxConvolve_ARGB8888(&effectOutBuffer,&effectInBuffer, NULL,0,0, radius, radius,0, kvImageEdgeExtend);
vImageBoxConvolve_ARGB8888(&effectInBuffer,&effectOutBuffer, NULL,0,0, radius, radius,0, kvImageEdgeExtend);
}
BOOL effectImageBuffersAreSwapped = NO;
if(hasSaturationChange){
CGFloat s = saturationDeltaFactor;
CGFloat floatingPointSaturationMatrix[]={
0.0722+0.9278* s,0.0722-0.0722* s,0.0722-0.0722* s,0,
0.7152-0.7152* s,0.7152+0.2848* s,0.7152-0.7152* s,0,
0.2126-0.2126* s,0.2126-0.2126* s,0.2126+0.7873* s,0,
0,0,0,1,
};
constint32_t divisor =256;
NSUInteger matrixSize =sizeof(floatingPointSaturationMatrix)/sizeof(floatingPointSaturationMatrix[0]);
int16_t saturationMatrix[matrixSize];
for(NSUInteger i =0; i saturationMatrix[i]=(int16_t)roundf(floatingPointSaturationMatrix[i]* divisor);
}
if(hasBlur){
vImageMatrixMultiply_ARGB8888(&effectOutBuffer,&effectInBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags);
effectImageBuffersAreSwapped = YES;
}
else{
vImageMatrixMultiply_ARGB8888(&effectInBuffer,&effectOutBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags);
}
}
if(!effectImageBuffersAreSwapped)
effectImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if(effectImageBuffersAreSwapped)
effectImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
// Set up output context.
UIGraphicsBeginImageContextWithOptions(self.size, NO,[[UIScreen mainScreen] scale]);
CGContextRef outputContext =UIGraphicsGetCurrentContext();
CGContextScaleCTM(outputContext,1.0,-1.0);
CGContextTranslateCTM(outputContext,0,-self.size.height);
// Draw base image.
CGContextDrawImage(outputContext, imageRect,self.CGImage);
// Draw effect image.
if(hasBlur){
CGContextSaveGState(outputContext);
if(maskImage){
CGContextClipToMask(outputContext, imageRect, maskImage.CGImage);
}
CGContextDrawImage(outputContext, imageRect, effectImage.CGImage);
CGContextRestoreGState(outputContext);
}
// Add in color tint.
if(tintColor){
CGContextSaveGState(outputContext);
CGContextSetFillColorWithColor(outputContext, tintColor.CGColor);
CGContextFillRect(outputContext, imageRect);
CGContextRestoreGState(outputContext);
}
// Output image is ready.
UIImage*outputImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outputImage;
}
@end

?

調(diào)用:
?


UIImageView*me =[[UIImageView alloc] initWithFrame:CGRectMake(10,480,614,381)];
[me setImage:[[UIImage imageNamed:@"me.png"] applyBlurWithRadius:5 tintColor:[UIColor colorWithWhite:1 alpha:0.2] saturationDeltaFactor:1.8 maskImage:nil]];
[self.view addSubview:me];

?

ok!So easy!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
久草在线在线精品观看| 国产精品v日韩精品v欧美精品网站| 久久夜精品香蕉| а√天堂资源国产精品| 污污视频在线| 国产伦精品一区二区三区视频小说| 成人午夜私人影院| 午夜精品久久久久久久四虎美女版| 欧美理论视频| 国产精品你懂的| 欧美+日本+国产+在线a∨观看| 亚洲第一成肉网| 99久久99久久精品国产片| 日本精品视频一区二区三区| 欧美国产不卡| 色94色欧美sute亚洲线路二| 午夜亚洲国产au精品一区二区| 大胸美女被爆操| 久久久成人网| 91国偷自产一区二区使用方法| 久久九九热免费视频| 国产69精品久久久久9999小说| 视频小说一区二区| 人人爽久久涩噜噜噜网站| 99精品热视频只有精品10| 日韩久久99| 欧美日韩成人在线视频| 成人免费视频视频在线观看免费| 亚洲欧洲另类精品久久综合| 久久国产精品高清一区二区三区| 日韩国产欧美在线播放| 成人午夜在线视频| 国产又大又粗又长| 涩涩av在线| 亚洲欧洲成人自拍| 欧美美女视频在线观看| 不许穿内裤随时挨c调教h苏绵| 日本h片在线观看| 精品亚洲aⅴ乱码一区二区三区| 国产精品一区二区三区www| 国产精品一区二区婷婷| 嗯啊主人调教在线播放视频| 亚洲精品欧美二区三区中文字幕| 密臀av一区二区三区| 欧美gv在线| 精品噜噜噜噜久久久久久久久试看| 精品美女视频在线观看免费软件| 日韩av在线中文| 亚洲国产尤物| 亚洲免费在线视频观看| 国产视频网站在线观看| 亚洲日本韩国一区| 黄色一级片在线观看| 亚洲成人va| 国产精品久久久999| 久久精品99国产精品日本| 中文字幕亚洲综合久久| 谁有免费的黄色网址| 高跟丝袜一区二区三区| 涩涩在线视频| 日本一区二区在线视频观看| 久久人人爽亚洲精品天堂| 国产精品无码av无码| 亚洲va久久久噜噜噜无码久久| 天堂社区日本电影超碰| 欧美不卡激情三级在线观看| 91麻豆天美传媒在线| 先锋影音av资源网| 精品久久久在线观看| 久久一区欧美| 国产精品热久久久久夜色精品三区| 波多野吉衣在线视频| 久久精品国产亚洲| 嗯用力啊快一点好舒服小柔久久| 视频在线观看免费影院欧美meiju| 国产精品第十页| 亚洲少妇一区二区| 国产精品视频一区视频二区| 天堂中文在线观看| 亚洲三级观看| 领导边摸边吃奶边做爽在线观看| 日韩成人在线观看| 中文文精品字幕一区二区| 日本黄区免费视频观看| 亚洲欧洲日本一区二区三区| 精品视频一二三区| 国产蜜臀一区二区打屁股调教| 成人国产视频在线观看| 99国产精品久久久久老师| 久久精品国产亚洲av香蕉| 91精品国产免费久久综合| 一区二区高清视频在线观看| 亚洲精品第三页| 九九精品久久| 四季av日韩精品一区| 午夜不卡久久精品无码免费| 日韩免费一区二区三区| 91精品国产色综合久久不卡电影| 美脚丝袜一区二区三区在线观看| 久久99免费视频| 看黄色一级大片| 天天操天天擦| 久久久久.com| 精品综合久久久久久8888| 福利网址在线观看| 国产天堂在线播放视频| 97电影在线看视频| 欧美女v视频| 国产精品久久久久久久久图文区| 亚洲国产精品精华液网站| 五十路熟女丰满大屁股| 在线永久免费观看黄网站| 成年在线观看免费人视频| 蜜桃999成人看片在线观看| 久久亚洲一区二区三区四区五区高| 亚洲欧美视频在线观看视频| 水蜜桃免费高清视频在线播放| www.色就是色| 欧美日韩亚洲综合| 欧美精品色婷婷五月综合| 午夜精品视频在线观看| 久久国产亚洲| 黄色的毛片免费| 成人激情视频小说免费下载| 在线成人动漫| av中文字幕不卡| 天堂一区二区在线免费观看| 精品人妻一区二区三区浪潮在线| 久久国产亚洲精品| 91夜夜未满十八勿入爽爽影院| 亚洲一区二区在线观看视频| 日韩综合第一页| 精品人妻无码中文字幕18禁| 亚洲另类在线一区| 国产精品久久久久久久7电影| 四虎影视国产在线视频| 一区二区精彩视频| 日韩久久精品一区| h版电影在线播放视频网址| 亚洲精品国产精品国| 福利微拍一区二区| www.av蜜桃| gogogo免费高清日本写真| 伦理av在线| 波多野结衣三级视频| 99www免费人成精品| www久久精品| 久久99精品国产麻豆不卡| 少妇精品无码一区二区| 美女黄色片视频| 极品美女扒开粉嫩小泬| 中文在线观看免费| 国产伦精品一区二区三区在线播放| 国产韩日精品| 久久精品道一区二区三区| 四虎www成人影院观看| 欧美一级免费在线观看| 欧美酷刑日本凌虐凌虐| 欧美性猛交xxxx乱大交退制版| 亚洲黄色在线网站| 国风产精品一区二区| 欧美禁忌电影网| 一区二区小视频| 久久不见久久见免费视频7| 精品久久久噜噜噜噜久久图片| 亚洲欧美日韩中文播放| 91麻豆精品久久毛片一级| 久久综合99| 国产精品成人在线| 日本在线视频一区二区三区| jizzjizz日本少妇| 午夜精品久久久久久久99| 国产精成人品免费观看| 第四色在线视频| 国产福利一区在线观看| 牛牛影视久久网| 色版视频在线观看| 在线一区视频观看| 欧美bbbbb| 亚洲影院天堂中文av色| 欧美激情a∨在线视频播放| 另类小说一区二区三区| 无码国产69精品久久久久网站| 一二三四中文在线| 老牛影视av一区二区在线观看| 四虎在线免费视频| 日韩精品另类天天更新| 国内精品在线一区| 日韩av成人在线| 激情小说亚洲| 国产激情一区二区三区桃花岛亚洲| 国产精品大陆在线观看| 色婷婷中文字幕| 国产精品成人免费观看| 久久久久久亚洲精品不卡4k岛国| 91麻豆产精品久久久久久夏晴子| 美女爽到呻吟久久久久| 日韩欧美国产精品综合嫩v| 高清乱码毛片入口| 中文字幕不卡在线视频极品| 午夜精品久久久久| 亚洲综合精品在线| 懂色av色香蕉一区二区蜜桃| 日韩视频三区| 韩国v欧美v日本v亚洲| www.国产com| 亚洲一级在线播放| 久久亚洲无码视频| 精品国内亚洲在观看18黄| 中文字幕在线亚洲精品| 国产成人自拍网站| 日本蜜桃在线观看视频| 福利在线国产| 97精品视频在线| 欧美三级网址| 不卡中文字幕在线| 国产一区二区高清不卡| 另类中文字幕国产精品| 亚洲裸色大胆大尺寸艺术写真| 日韩精品亚洲视频| 欧美精品aⅴ在线视频| xxxx欧美| 女人和拘做爰正片视频| 欧美大片免费观看| 日韩一区在线看| 久久亚洲精品国产精品紫薇| 欧美精品羞羞答答| 久久精品国产亚洲aⅴ| 国产亚洲精品美女久久久| 欧美一区二区三区在线观看视频| 无码人妻黑人中文字幕| 来吧亚洲综合网| 美女又爽又黄视频毛茸茸| 天天干天天操天天操| 国产三区精品| 国产精品99久久久久久白浆小说| 天海翼一区二区三区四区在线观看| 国产在线不卡视频| 99xxxx成人网| 国产精品免费久久久久久| 国产欧美日韩电影| 精品国产麻豆免费人成网站| 人妻换人妻a片爽麻豆| av成人免费网站| 亚洲精品乱码久久久久久黑人| 草草在线观看| 日韩毛片无码永久免费看| 女子免费在线观看视频www| 色九视频91| 老熟妇一区二区三区| 柠檬在线导航福利| 亚洲小说区图片| 成人久久视频在线观看| 国产啊啊啊视频在线观看| 99re热视频| 亚洲精品乱码久久久久久蜜桃91| 蜜桃视频在线播放| 精品国产一区二区三区不卡蜜臂| 妖精视频一区二区三区免费观看| 婷婷福利视频导航| 国产成人午夜精品| 天堂中文资源在线| 视频在线观看一区| 无码一区二区三区在线观看| 国产小视频免费在线观看| 久久xxxx| 久操国产精品| 精品一区二区6| 国产一区二区久久久久| 午夜av区久久| 国产一区二区高清| 蜜桃日韩视频| 丰满大乳奶做爰ⅹxx视频| 国产偷窥洗澡视频| jiuse.com91视频| 性感美女一区二区三区| 亚洲av无一区二区三区久久| 亚洲国产wwwccc36天堂| 九九九九九九九九| 成人av网页| 久久国产精品国语对白| 一区二区在线看| 亚洲精品v亚洲精品v日韩精品| 成人精品在线视频观看| 91片在线免费观看| 色呦呦在线资源| 亚洲自拍偷拍区| 成人欧美精品一区二区| 欧美日韩国产成人在线免费| 在线观看成人网| 亚洲毛片在线免费| 日韩最新av| 欧亚在线中文字幕免费| 欧美视频国产精品| 欧洲一区在线电影| 精品女同一区二区三区在线观看| 亚洲成人在线免费| 大胸美女被爆操| 香蕉乱码成人久久天堂爱免费| 美女喷水网站| 久久久久久久久久99| 日本高清免费不卡视频| 人妻无码中文字幕免费视频蜜桃| 欧美日韩一道本| 日日摸夜夜添夜夜添亚洲女人| 国产一区二区视频网站| 亚洲一区亚洲二区亚洲三区| 深爱激情久久| 国产高清av| 色欲色香天天天综合网www| 亚洲综合另类小说| 性色av蜜臀av| 国产精品进线69影院| 黄色成人在线免费| 91精品国产91久久久久久一区二区| 日韩精品欧美成人高清一区二区| 久久国产尿小便嘘嘘| 视频一区二区三区在线看免费看| 成人性生交大合| 任你弄在线视频免费观看| 在线一级观看| 久久精品99国产精| 久久93精品国产91久久综合| 国产91综合网| 日本中文字幕一区二区有码在线| 精品久久sese| 中文欧美在线视频| 蜜桃视频一区二区|