gpt4 book ai didi

ios - GLKView + CIImage with Alpha + AVFoundation = Trippy Mess

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:50:27 25 4
gpt4 key购买 nike

我正在使用 AVFoundation 从相机捕获信息,将其传递给 CIFilter 以将较暗的像素替换为 alpha 级别为 0 的像素,并将其显示在 GLKView 上。

包含的 View Controller 是一个 GLKViewController,但程序的核心是函数:

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
@autoreleasepool {

CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)CMSampleBufferGetImageBuffer(sampleBuffer);

CIImage *image = [CIImage imageWithCVPixelBuffer:pixelBuffer options:[NSDictionary dictionaryWithObject:(id)kCFNull forKey:kCIImageColorSpace]];


image = [image imageByApplyingTransform:CGAffineTransformMakeRotation(-M_PI/2.0)];

CGPoint origin = [image extent].origin;
image = [image imageByApplyingTransform:CGAffineTransformMakeTranslation(-origin.x, -origin.y)];

[self.replaceDarkColorWithTransparentFilter setValue:image forKey:@"inputImage"];

image = self.replaceDarkColorWithTransparentFilter.outputImage;

[self.ciContext drawImage:image inRect:CGRectMake(0.0f, 0.0f, 480.0f, 640.0f) fromRect:[image extent]];
[self.eaglContext presentRenderbuffer:GL_RENDERBUFFER];

[self.replaceDarkColorWithTransparentFilter setValue:nil forKey:@"inputImage"];
}
}

在 GLKViewController 中,我使用以下方法初始化渲染缓冲区:

glGenRenderbuffers(1, &_renderBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);

结果是旧图像没有被清除和显示。结果如下所示:http://d.pr/i/M02z这是正常的吗?难道不应该清除旧环境并重新开始吗?

我在更新时尝试了 glFlush(); 并尝试在 glkView:(GLKView *)view drawInRect:(CGRect)rect 中尝试为图像绘制 nil CIContext 无济于事。

有什么我想念的吗?

最佳答案

您将需要使用如下代码清除您的帧缓冲区之前的内容

glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);

在绘制新的 Core Image 框架之前的某个时刻。这会将帧缓冲区的内容和 alpha channel 设置为 0.0,为您提供一个干净的平台来绘制过滤后的图像。

您可能还需要使用类似

的方式设置当前的 OpenGL ES 上下文
[EAGLContext setCurrentContext:self.openGLESContext];

就在这之前,因为我不记得 Core Image 是否会为您正在处理的任何线程正确保留该设置。

关于ios - GLKView + CIImage with Alpha + AVFoundation = Trippy Mess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com