Objective c 目的-C关于CIHistogramDisplayFilter的快速转换问题
我用Objective-C显示了一个柱状图,这很好用。然而,我很难将其转换为Swift 目标-CObjective c 目的-C关于CIHistogramDisplayFilter的快速转换问题,objective-c,xcode,swift,histogram,ciimage,Objective C,Xcode,Swift,Histogram,Ciimage,我用Objective-C显示了一个柱状图,这很好用。然而,我很难将其转换为Swift 目标-C //Show Histogram CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CFDictionaryRef attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, sampleBuffer
//Show Histogram
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CFDictionaryRef attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, sampleBuffer, kCMAttachmentMode_ShouldPropagate);
CIImage *ciImage = [[CIImage alloc] initWithCVPixelBuffer:pixelBuffer options:(__bridge NSDictionary *)attachments];
NSUInteger count = 256;
count = count <= 256 ? count : 256;
count = count >= 1 ? count : 1;
NSDictionary *params = @{kCIInputImageKey: ciImage,
kCIInputExtentKey: [CIVector vectorWithCGRect:[ciImage extent]],
@"inputCount": @(256), @"inputScale": @(200)
};
CIFilter *filter = [CIFilter filterWithName:@"CIAreaHistogram"
withInputParameters:params];
CIImage *outImage = [filter outputImage];
//---------------------------------------------
CIContext *context = [CIContext contextWithOptions:nil];
NSDictionary *params2 = @{
kCIInputImageKey: outImage
};
CIFilter *filter2 = [CIFilter filterWithName:@"CIHistogramDisplayFilter"
withInputParameters:params2];
CIImage *outputImage = [filter2 outputImage];
CGRect outExtent = [outputImage extent];
CGImageRef cgImage = [context createCGImage:outputImage
fromRect:outExtent];
UIImage *outImage2 = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
// resize
UIImage *resized = [self resizeImage:outImage2
withQuality:kCGInterpolationNone
rate:2.5];
//Remove the default grey background
resized = [self removeColorFromImage:resized grayLevel:137];
dispatch_async(dispatch_get_main_queue(),
^{
self.histogramView.image = resized;
});
最后一行给出了错误:
Argument labels '(cVPixelBuffer:, options:)' do not match any available overloads
//显示直方图——Swift版本
var pixelBuffer:CVPixelBufferRef=CMSampleBufferGetImageBuffer(sampleBuffer)!
变量附件:CFDictionaryRef=CMCopyDictionaryOfAttachments(kCFAllocatorDefault、sampleBuffer、kCMAttachmentMode_ShouldPropagate)!
var ciImage:ciImage=ciImage(CVPixelBuffer:pixelBuffer,选项:附件为?[String:AnyObject])
变量计数=256
计数=计数=1?计数:1
设params=[kCIInputImageKey:ciImage,
kCIInputExtentKey:CIVector.init(CGRect:ciImage.extent),
“输入计数”:256,“输入比例”:200]
让筛选器:CIFilter!=CIFilter(名称:“CIAreaHistogram”,带输入参数:params)
让输出图像:CIImage=(过滤器?.outputImage)!
//---------------------------------------------
let context:CIContext=CIContext(选项:nil)
设params2=[kCIInputImageKey:outImage]
let filter2=CIFilter(名称:“CIHistogramDisplayFilter”,输入参数:params2)
让outputImage:CIImage=filter2!。输出图像!
让outExtent:CGRect=outputImage.extent
让cgImage:CGImageRef=context.createCGImage(outputImage,fromRect:outExtent)
让outImage2:UIImage=UIImage(CGImage:CGImage)
//调整大小
设置大小:UIImage=self.resizeImage(outImage2,带质量:cg插值。无,速率:2.5)
//删除默认的灰色背景
resized=self.removeColorFromImage(已调整大小,灰度:137)
dispatch\u async(dispatch\u get\u main\u queue()){
self.historogramview.image=已调整大小
}
按⇧⌘O(O不是零),然后CIIma
,然后return
然后检查init方法的拼写。您有一个输入错误:使用CVPixelBuffer
,而不是CVPixelBuffer
@gizmodo,您尝试过我的转换吗?工作得很好!非常感谢。工作完美!非常感谢。
Argument labels '(cVPixelBuffer:, options:)' do not match any available overloads
//Show Histogram -- Swift version
var pixelBuffer: CVPixelBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer)!
var attachments: CFDictionaryRef = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, sampleBuffer, kCMAttachmentMode_ShouldPropagate)!
var ciImage: CIImage = CIImage(CVPixelBuffer: pixelBuffer, options: attachments as? [String : AnyObject])
var count = 256
count = count <= 256 ? count : 256
count = count >= 1 ? count : 1
let params = [kCIInputImageKey: ciImage,
kCIInputExtentKey:CIVector.init(CGRect: ciImage.extent),
"inputCount":256, "inputScale":200]
let filter:CIFilter! = CIFilter(name: "CIAreaHistogram" , withInputParameters: params)
let outImage: CIImage = (filter?.outputImage)!
//---------------------------------------------
let context:CIContext = CIContext(options: nil)
let params2 = [kCIInputImageKey: outImage]
let filter2 = CIFilter(name: "CIHistogramDisplayFilter",withInputParameters: params2)
let outputImage:CIImage = filter2!.outputImage!
let outExtent:CGRect = outputImage.extent
let cgImage:CGImageRef = context.createCGImage(outputImage, fromRect: outExtent)
let outImage2:UIImage = UIImage(CGImage: cgImage)
// resize
let resized:UIImage = self.resizeImage(outImage2,withQuality:CGInterpolation.None,rate:2.5)
//Remove the default grey background
resized = self.removeColorFromImage(resized, grayLevel:137)
dispatch_async(dispatch_get_main_queue()) {
self.histogramView.image = resized
}