Ich habe dieses Code-Snippet, um ein Histogramm in Objective-C anzuzeigen, das einwandfrei funktioniert. Es fällt mir jedoch schwer, sie in Swift umzuwandeln.Objective-C zu schnell Konvertierungsproblem auf CIHistogramDisplayFilter
Objective-C
//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;
});
Während es zu Swift Umwandlung, begann ich diese Fehler bekommen:
var pixelBuffer: CVPixelBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer)!
var attachments: CFDictionaryRef = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, sampleBuffer, kCMAttachmentMode_ShouldPropagate)!
var ciImage: CIImage = CIImage(cVPixelBuffer: pixelBuffer, options: (attachments as! [NSObject : AnyObject]))
Das letzte Zeile gibt mir den Fehler:
Argument labels '(cVPixelBuffer:, options:)' do not match any available overloads
Drücken Sie ⇧⌘O (O nicht Null), dann 'CIIma', dann' return', dann ch Bestätigen Sie die Schreibweise der init-Methode. – vadian
Sie haben einen Tippfehler: Verwenden Sie 'CVPixelBuffer', nicht' cVPixelBuffer' – JAL
@gizmodo, haben Sie meine Konvertierung versuchen? –