- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 GPUImageAlphaBlendFilter
,我在 UI
中也有一个 slider ,它允许我更改mix。它工作得很好,我真的可以快速来回移动 slider ,但如果我滑动太快或滑动超过几秒钟,它通常会给我这个错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to overrelease a framebuffer, did you forget to call -useNextFrameForImageCapture before using -imageFromCurrentFramebuffer?
来自GPUImage/framework/Source/GPUImageFramebuffer.m:269中的解锁函数
根据 Brad Larson 的 Framebuffer Article , useNextFrameForImageCapture 不是明确需要的,因为 imageByFilteringImage 已经解决了这个问题。但不知何故,帧缓冲区计数不同步,可能是因为它跟不上快速更新请求。
我想知道我是否做错了什么。有什么想法吗?
下面的代码基本上是这样做的:
1. 首先调用设置过滤器来设置所有内容
2. 当 slider 移动时,applyAndGetCIImage
被 slider 调用。
public class StylePhotoFilter: PhotoFilter {
var blendFilter: GPUImageAlphaBlendFilter!
var originalImage: UIImage!
var styledImage: UIImage!
var styledImageSource: GPUImagePicture!
override func setupFilter() {
// setup the filters
blendFilter = GPUImageAlphaBlendFilter()
// setting up the image to edit
if(uiImage == nil) {
let context = CIContextManager.sharedInstance
let cgiImgRef = context.createCGImage(inputImage, fromRect: inputImage.extent())
originalImage = UIImage(CGImage: cgiImgRef)
} else {
originalImage = uiImage!
}
// apply the style fully
// styledImage = // I created this image earlier, we can assume it works
// add target photo
styledImageSource = GPUImagePicture(image: styledImage)
styledImageSource.addTarget(blendFilter, atTextureLocation: 0)
}
public override func applyAndGetCIImage(sliderVal: Float) -> CIImage! {
// set the mix
blendFilter.mix = sliderVal
// blend it
// blendFilter.useNextFrameForImageCapture() // According to Brad Larson, this is no longer needed, as imageByFilteringImage does this for you
styledImageSource.processImage()
let blendedImage = blendFilter.imageByFilteringImage(originalImage)
return CIImage(image: blendedImage)
}
}
最佳答案
方法 useNextFrameForImageCapture
应该应用于滤镜,但不适用于图片。
blendFilter = GPUImageAlphaBlendFilter()
blendFilter.useNextFrameForImageCapture()
关于ios - GPUImage - 尝试在混合过于频繁时过度释放帧缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27140906/
我是一名优秀的程序员,十分优秀!