我试图从苹果公开发布的iOS7示例屏幕中复制这个模糊的背景:
这个问题建议对下面的内容应用CI筛选器,但这是一种完全不同的方法。很明显,iOS 7没有捕获以下视图的内容,原因有很多:
任何人都可以假设他们可以使用什么样的框架来产生这种效果,以及是否有可能在当前的公共API中产生类似的效果?
编辑:(来自评论)我们不确切知道苹果是如何做到的,但是我们可以做一些基本的假设吗?我们可以假设他们在使用硬件,对吗?
效果是否在每个视图中都是独立的,以至于效果实际上不知道它背后是什么?或者,必须根据模糊的工作方式,考虑模糊背后的内容?
如果效果背后的内容是相关的,我们是否可以假设苹果正在接收下面内容的“提要”,并不断地以模糊呈现它们?
事实上,我打赌这将是相当简单的实现。它可能不会运行,或者看起来与苹果的情况完全一样,但可能非常接近。
首先,您需要确定要呈现的UIView的CGRect。一旦你确定了,你只需要抓取用户界面的一部分的图像,这样它就可以模糊了。像这样的东西...
- (UIImage*)getBlurredImage {
// You will want to calculate this in code based on the view you will be presenting.
CGSize size = CGSizeMake(200,200);
UIGraphicsBeginImageContext(size);
[view drawViewHierarchyInRect:(CGRect){CGPointZero, w, h} afterScreenUpdates:YES]; // view is the view you are grabbing the screen shot of. The view that is to be blurred.
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Gaussian Blur
image = [image applyLightEffect];
// Box Blur
// image = [image boxblurImageWithBlur:0.2f];
return image;
}
使用苹果提供的UIImage-ImageEffects
类别,你会得到一个高斯模糊,看起来非常像iOS 7中的模糊。
您还可以使用下面的box BlurImageBackBlur:
UIImage类别来使用框模糊。这是基于你可以在这里找到的一个算法。
@implementation UIImage (Blur)
-(UIImage *)boxblurImageWithBlur:(CGFloat)blur {
if (blur < 0.f || blur > 1.f) {
blur = 0.5f;
}
int boxSize = (int)(blur * 50);
boxSize = boxSize - (boxSize % 2) + 1;
CGImageRef img = self.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(@"JFDepthView: 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);
CGImageRelease(imageRef);
return returnImage;
}
@end
现在,您正在计算要模糊的屏幕区域,将其传递到模糊类别并接收模糊的UIImage返回,现在剩下的就是将模糊的图像设置为您将呈现的视图的背景。就像我说的,这不会是苹果正在做的事情的完美匹配,但它看起来仍然应该很酷。
希望有帮助。
苹果在WWDC发布了代码,作为UIImage上的一个类别,包括这个功能,如果你有一个开发者账户,你可以通过以下链接获取UIImage类别(和其余的示例代码):https://developer.apple.com/wwdc/schedule/并浏览第226节点击详细信息。我还没有玩过它,但我认为iOS6的效果会慢得多,iOS7有一些增强功能,可以抓取用作模糊输入的初始屏幕截图快了很多。
直接链接:https://developer.apple.com/downloads/download.action?path=wwdc_2013/wwdc_2013_sample_code/ios_uiimageeffects.zip
为什么要费心复制这种效果呢?只需在视图后面绘制一个UIToolbar。
myView.backgroundColor = [UIColor clearColor];
UIToolbar* bgToolbar = [[UIToolbar alloc] initWithFrame:myView.frame];
bgToolbar.barStyle = UIBarStyleDefault;
[myView.superview insertSubview:bgToolbar belowSubview:myView];
除了使用CSS或javascript之外,有没有更本机的解决方案使用Phonegap来创建iOS7模糊效果? 我以前从未使用过Phonegap,我的应用程序需要模糊效果,我正在尝试使用我的网络技能创建此应用程序,或者雇佣本地开发人员。 谢谢大家!
安卓的模糊视图 > 原文链接 : A Blurring View for Android 作者 : Jun Luo 译者 : lvtea0105 校对者: bboyfeiyu 校对者: chaossss 状态 : 校对完成 模糊效果可以生动地表现出内容的层次感,当使用者关注重点内容,即便在模糊表面之下发生视差效果或者动态改变,也能够保持当前背景。 在IOS设备中,我们首先构造一个UIVisualE
问题内容: 我正在尝试在Java游戏中实现模糊机制。如何在运行时创建模糊效果? 问题答案: 请参阅/ Google“卷积滤镜”,这是一种根据周围像素值更改像素值的方法。因此,除了模糊之外,您还可以进行图像锐化和寻线。
注意: Internet Explorer和Safari不支持SVG滤镜! <defs> 和 <filter> 所有互联网的SVG滤镜定义在<defs>元素中。<defs>元素定义短并含有特殊元素(如滤镜)定义。 <filter>标签用来定义SVG滤镜。<filter>标签使用必需的id属性来定义向图形应用哪个滤镜? SVG <feGaussianBlur> 实例 1 <feGaussianBlu
本文向大家介绍iOS图片模糊效果的实现方法,包括了iOS图片模糊效果的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了iOS图片模糊效果的三种实现方式,供大家参考,具体内容如下 1.实现效果依次如图:原图、iOS8效果、Core Image效果、 VImage 效果 - 2. 代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
问题内容: 我想绘制概率图,但是imshow会为概率为零的点生成模糊值。如何摆脱围绕真实网格点的模糊外围? 例: 问题答案: 默认情况下(在mpl 2.0中已更改),对数据进行插值(就像对图像所做的那样)。您需要做的就是告诉它不要插值: 也将为您想要的工作。 doc