GPUImageAlphaBlendFilter
을 사용하면 UI
의 슬라이더를 사용하여 의 조합을으로 변경할 수 있습니다. 그것은 위대한 작품, 나는 앞뒤로 빠르게 주위에 슬라이더를 이동할 수 있지만 너무 자주 슬라이딩하거나 몇 초 동안 주위에 미끄러지는 경우 종종이 오류를 줄 것이다 :GPUImage - 너무 자주 블렌딩 할 때 프레임 버퍼를 과도하게 사용하려고 시도했습니다
그것은 GPUImage/프레임 워크/소스에 잠금 해제 기능에서오고uncaught exception 'NSInternalInconsistencyException', 이유 : '프레임 버퍼를 과도하게 사용하려고 시도했습니다. -imageFromCurrentFramebuffer를 사용하기 전에 -useNextFrameForImageCapture를 호출하는 것을 잊었습니까?
/GPUImageFramebuffer.m : imageByFilteringImage 이미이 알아서하기 때문에 브래드 라슨의 Framebuffer Article, useNextFrameForImageCapture가 명시 적으로 필요하지 않습니다에 따르면 269
. 그러나 어떻게 든 프레임 버퍼가 동기화되지 않고 있습니다. 아마도 빠른 업데이트 요청을 따라갈 수 없기 때문일 것입니다.
제가 제대로하고 있지 않은 것이 있는지 궁금합니다. 어떤 아이디어? 아래
코드는 기본적으로하고있다 : 슬라이더가 이동함에 따라
1. 먼저 applyAndGetCIImage
는 슬라이더라고, 모든 설정을
2를 얻기 위해 설정 필터를 호출.
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)
}
}
흥미 롭군요. 그래서 나는 그것도 시도했지만 여전히 같은 오류입니다. 이것은 잠시 동안 작동하지만 슬라이더를 많이 움직일 때만 오류가 발생합니다. – kineticac
슬라이더를 움직이지 않으면 제대로 작동합니까? –
슬라이더를 움직이면 제대로 작동합니다. 내가 그것을 정말로 빨리 몇 초 동안 움직이 자마자 그것은 부서집니다. 거의 스레드 안전하지 않습니다. – kineticac