【发布时间】:2013-02-25 23:38:44
【问题描述】:
我正在使用AVCaptureVideoDataOutput 及其委托方法来操作视频帧。在委托方法中,我使用sampleBuffer 创建CIImage,并从这里裁剪CIImage,将其转换为UIImage 并显示它。不幸的是,我需要确定这个新UIImage 的文件大小,但它会返回0。代码有效,图像裁剪精美,一切。我只是不明白为什么它没有数据!
为什么会这样?相关代码如下:
//In delegate method, given sampleBuffer...
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CFDictionaryRef attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault,
sampleBuffer, kCMAttachmentMode_ShouldPropagate);
CIImage *ciImage = [[CIImage alloc] initWithCVPixelBuffer:pixelBuffer
options:(NSDictionary *)attachments];
...
dispatch_async(dispatch_get_main_queue(), ^(void) {
CGRect rect = [self drawFaceBoxesForFeatures:features forVideoBox:clap
orientation:curDeviceOrientation];
CIImage *cropped = [ciImage imageByCroppingToRect:rect];
UIImage *image = [[UIImage alloc] initWithCIImage:cropped];
NSData *data = UIImageJPEGRepresentation(image, 1);
NSLog(@"Image size is %d", data.length); //returns 0???
[imageView setImage:image];
[image release];
});
【问题讨论】:
-
只是一个 NB -
data.length返回一个无符号整数,因此您的NSLog语句应该如下所示:NSLog(@"Image size is %u", data.length) -
这是真的 - 尽管它对输出没有影响。我正在尝试筛选 Apple 的文档,只是因为我知道 CoreImage 实际上不是图像,只是数据表示。但在这一点上,我无法理解为什么它在转换时没有数据..
-
是的,恐怕我被你的实际问题难住了——假设当你在调用
UIImageJPEGRepresentation后断点时,你的NSData对象实际上有数据。 -
好吧,进一步测试没有 -
NSData对象中不存在数据。但是我在UIImageView中的每一帧都显示了正确裁剪的图像,这让我很困惑。转换为UIImage显示没有问题,但没有数据。 -
你不必为
UIImageJPEGRepresentation而不是CIImage使用CGImage吗?但即使 CIImage 有效,代码也不会是:NSData *data = UIImageJPEGRepresentation(image.CIImage, 1);
标签: objective-c cocoa-touch uiimage core-image