2013-02-25 1 views
0

AVCaptureVideoDataOutput과 함께 비디오 프레임을 조작하는 대리자 메서드를 사용하고 있습니다. 위임 방법에서는 CIImage을 만들기 위해 sampleBuffer을 사용하고 여기에서 CIImage을 자르고 UIImage으로 변환하여 표시합니다. 죄송 합니다만이 새로운 파일 크기는 UIImage이지만이를 0으로 반환합니다. 코드가 작동하고 이미지가 아름답게 잘립니다. 왜 데이터가 없는지 나는 알 수 없습니다!CIImage의 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]; 
}); 
+0

그냥 NB에서이 두 줄 필요 - '부호없는 int를 돌려 data.length'을, 그래서 당신의'NSLog' 문 대신 다음과 같이한다 :'NSLog를 (@ "이미지 크기는 % u", data.length)' – lxt

+0

이것은 사실입니다. 그러나 출력에는 영향을 미치지 않습니다. CoreImage가 실제로 이미지가 아니라 단지 데이터 표현이라는 것을 알고 있기 때문에 Apple의 문서를 살펴보기 위해 노력하고 있습니다. 그러나이 시점에서 나는 변환 할 때 데이터가없는 이유는 무엇인지 모르겠다. – bgoers

+0

네, 실제로 문제가 생겨서 곤란하다. - 당신이'UIImageJPEGRepresentation'를 호출 한 후에 중단 점을 만들면 NSData 객체 실제로 데이터가 있습니다. – lxt

답변

2

동일한 문제가 있지만 간단한 필터링 이미지가 있습니다.

나는 this을 우연히 발견하고 문제를 해결했습니다. 이 후, 나는 나의 이미지를 저장할 수 있었다.

CGSize size = self.originalImage.size; 
CGRect rect; 
rect.origin = CGPointZero; 
rect.size = size; 

UIGraphicsBeginImageContext(size); 
[[UIImage imageWithCIImage:self.filteredImage] drawInRect:rect]; 
UIImage * image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

NSData * jpegData = UIImageJPEGRepresentation(image, 1.0); 

하지만 단지 "ImageContext"