- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的应用程序中使用以下代码,在我使用 iOS <= 10.1.* 之前,从 AVCaptureOutput -didOutputSampleBuffer
接收到一次又一次地在 GLKView 上绘制 CIImage 时执行得非常好。*
将设备更新到 iOS 10.2.1 后,它已停止工作。我调用它的几帧应用程序只是因内存不足警告而崩溃。而在 iOS 10.1.1 及以下版本中,即使在 iPhone 5S 等较旧的设备上,我也能流畅地运行该应用程序。
[_glkView bindDrawable];
if (self.eaglContext != [EAGLContext currentContext])
[EAGLContext setCurrentContext:self.eaglContext];
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
if (ciImage) {
[_ciContext drawImage:ciImage inRect:gvRect fromRect:dRect];
}
[_glkView display];
这就是我制作 CIImage 的方式。
- (CIImage*)ciImageFromPixelBuffer:(CVPixelBufferRef)pixelBuffer ofSampleBuffer:(CMSampleBufferRef)sampleBuffer {
CIImage *croppedImage = nil;
CFDictionaryRef attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, sampleBuffer, kCMAttachmentMode_ShouldPropagate);
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer options:(NSDictionary *)attachments];
if (attachments)
CFRelease(attachments);
croppedImage = ciImage;
CIFilter *scaleFilter = [CIFilter filterWithName:@"CILanczosScaleTransform"];
[scaleFilter setValue:croppedImage forKey:@"inputImage"];
[scaleFilter setValue:[NSNumber numberWithFloat:self.zoom_Resize_Factor == 1 ? 0.25 : 0.5] forKey:@"inputScale"];
[scaleFilter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputAspectRatio"];
croppedImage = [scaleFilter valueForKey:@"outputImage"];
NSDictionary *options = @{(id)kCIImageAutoAdjustRedEye : @(false)};
NSArray *adjustments = [ciImage autoAdjustmentFiltersWithOptions:options];
for (CIFilter *filter in adjustments) {
[filter setValue:croppedImage forKey:kCIInputImageKey];
croppedImage = filter.outputImage;
}
CIFilter *selectedFilter = [VideoFilterFactory getFilterWithType:self.selectedFilterType]; //This line needs to be removed from here
croppedImage = [VideoFilterFactory applyFilter:selectedFilter OnImage:croppedImage];
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
return croppedImage;
}
这是图片链接 http://imgur.com/a/u6Vyo VM Tracker 和 OpenGL ES 仪器结果。万一它易于理解。谢谢。
最佳答案
您的 GLKView 渲染实现看起来不错,问题似乎出在将 PixelBuffer 转换为 CIImage 后您对其进行的处理量。
此外,您共享的 Imgur 链接显示 GLKView 无法正确准备 VideoTexture 对象,很可能是由于每次迭代中产生的内存过载。您需要优化此 CIFilter 处理。
关于ios - 自更新到 iOS 10.2 后几帧后无法在 GLKView 上绘制 CIImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42086664/
我正在尝试创建一个将过滤器应用于视频文件的应用程序。我想使用核心图像过滤器 imageBuffer obtained from AVAssetReaderInput int heigh
我正在修改找到的代码 here .在代码中,我们使用 AVCaptureSession 从手机摄像头捕获视频,并使用 CIDetector 检测图像馈送中的矩形。提要有一个 640x842 的图像(纵
有什么方法可以将 CIImage 转换为 NSData 而无需将 CIImage 转换为 UIImage 或 CGImage? 我正在尝试制作一个相机应用程序。抓图时,我用CIImage处理图片,给图
我想从文件(文件系统上的 jpeg)旋转一个 UIImage 计算的弧度,但我想围绕图像中的一个点旋转它,并保持图像的原始大小(在图像数据不再存在的图像中有透明间隙,以及已移动到原始帧之外的裁剪图像数
因此,Apple 的文档说 CIImage 符合 Equatable。我认为这意味着以下单元测试将通过。然而,事实并非如此。我很想知道为什么。 func test_CIImageEqualitySho
我在 Playground 上有以下代码: import UIKit var str = "Hello, playground" func rescaledImage(_ image: UIImage
CIColorMap CIFilter 将 CIImage 作为输入。使用另一个 CIFilter(例如 CILinearGradient)动态生成该输入图像是有意义的,但是向颜色图过滤器提供过滤器的
我正在尝试水平翻转我的 CIImage : image = [image imageByApplyingTransform:CGAffineTransformMakeScale(1, -1)]; im
如何将两个或多个 CIImage 组合成另一个。我尝试使用 ciContext.drawImage。我如何从中获取 CGImage?我所理解的是,我正在写一个我应该能够从中获得图像的上下文。如果我理解
我正在使用 CIImage,虽然我知道它不是线性图像,但它确实包含一些数据。 我的问题是 CIImage 的范围属性是否返回像素或点?根据documentation ,说的很少,是工作空间坐标。这是否
我有一个接受 UIImage 的类,用它初始化一个 CIImage,如下所示: workingImage = CIImage.init(image: baseImage!) 然后使用图像以 3x3 的
如何在 CIAffineTransform 之后使我的 CIImage 有限,以便我可以将其传递给 NSBitmapImageRep:initWithCIImage? 总的来说,我想通过 CIAddi
我使用一些CIFilter来进行一些图像处理。我发现 UIImageView 太慢,无法实时显示输出图像。我关注了documentation并构建了GLKView。现在性能很完美,但旋转时图像呈现为黑
我有一个 258x258 的 CIImage。我应用过滤器 CIAreaAverage到它,以获得该图像的平均颜色的绿色值。 我正在使用此功能来获得... // channel 0,1,2 = red
我正在尝试裁剪图像并通过夹紧从边缘延伸颜色,但之后返回一个奇怪的图像大小: let image = UIImage(named: "frame_1") var ciimage = CIImage(im
核心图像不起作用: let fileUrl = Bundle.main.url(forResource: "image", withExtension: "png") let bega
我有一个 UIImageView 我想向我的 UIImageView 添加一个 CIImage这是我的代码 @IBOutlet weak var imgimgurl: UIImageView! img
我是 swift 新手,正在尝试使用 React Native 的 CoreML 功能。 我有一个 URL 为字符串的源文件。我使用 let imageURL = URL(fileURLWithPat
我正在使用一个 CIImage,我需要通过每个像素减去 128 然后除以 128 来对其进行标准化。我怎样才能用CIFilter来做到这一点 最佳答案 不确定这是否有效,但也许您可以应用两个具有静态颜
我正在对来自设备相机的图像运行多个 CoreImage 滤镜,但在将结果保存到相机胶卷时遇到了意想不到的麻烦。我的图像操作的结果是 CIImage,我可以保存到 ALAssetsLibrary 中的数
我是一名优秀的程序员,十分优秀!