2013-10-16 2 views
1

현재 실시간 카메라 이미지의 스냅 샷을 찍으려고 시도한 임시 변경에서 ImageSnap의 일부 내부 부품을 조정 중입니다. 나는 이미지가 화면 비율에 관계없이 크기가 조정되었다 것으로 나타났습니다, 다음 줄에 문제를 추적 :CIImage에서 깨끗한 조리개 자르기를 피하십시오. imageWithCVImageBuffer

CVImageBufferRef frame; 
// obtain frame 
verbose("frame is %d x %d px\n", (int)CVPixelBufferGetWidth(frame), 
           (int)CVPixelBufferGetHeight(frame)); 
CIImage *ciimg = [CIImage imageWithCVImageBuffer:frame]; 
verbose("CIImage has %d x %d px\n", (int)[ciimg extent].size.width, 
            (int)[ciimg extent].size.height); 

적어도 내가 사용 한 해당 장치에 대한,이 라인의 출력이

frame is 1920 x 1080 px 
CIImage has 1888 x 1062 px 
입니다

이미지의 크기가 조정 된 코드 부분은 보이지 않지만 이미지의 크기는 분명히 조정되었습니다. 그게 어디에서 왔으며, 더 중요한 것은 어떻게 그것을 막을 수 있습니까?

나는 다음과 같은 문서를 사용하고 있지만, 거기에 힌트를 찾을 수 없습니다 :


편집 :로 내가 말할 수있는 한, 스케일링은 없지만 대신 자르기가 실행됩니다. 깨끗한 구멍 설정 mentioned in the Core Video Programming Guide로 인해. 그래서 이제이 깨끗한 조리개를 전체 프레임 크기로 설정하는 방법이나이를 사용하지 못하도록하는 방법에 대해 의문이 생깁니다.

답변

1

당신은 애플에서 RosyWriter 앱에서 imageWithCVImageBuffer

+0

가까운 장래에 테스트 할 수 없지만 실제로 시도해 볼 수있을 때까지 작동한다고 가정합니다. 감사! – MvG

0

를 호출하기 전에

CVBufferRemoveAttachment(frame, kCVImageBufferCleanApertureKey); 

와 깨끗한 조리개 데이터를 제거 할 수 있습니다 대신 폭의

사용 extendedWidth은 (가능한 행 확장을 고려하여 때때로 메모리 정렬에 사용됨) :

unsigned char *base = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer); 
size_t width = CVPixelBufferGetWidth(pixelBuffer); 
size_t height = CVPixelBufferGetHeight(pixelBuffer); 
size_t stride = CVPixelBufferGetBytesPerRow(pixelBuffer); 
size_t extendedWidth = stride/sizeof(uint32_t); // each pixel is 4 bytes/32 bits 

첫 번째 제안은 결실입니다.