스노우 레오파드에서 색상이나 감마 보정없이 QTKit에서 이미지 데이터를 얻으려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/2052504

  •  20-09-2019
  •  | 
  •  

문제

Snow Leopard이므로 Qtkit은 이제 qtmovies frameimageattime과 같은 함수에서 색상 수정 된 이미지 데이터를 반환하고 있습니다. 압축되지 않은 AVI 파일이 주어지면 Snow Leopard와 Leopard에서 동일한 이미지 데이터가 더 큰 픽셀 값으로 표시됩니다.

현재 FrameImageatTime을 사용하여 nsimage를 얻은 다음 해당 이미지의 TiffResentation을 요청합니다. 이 작업을 수행 한 후 픽셀 값은 스노우 레오파드에서 약간 높습니다.

예를 들어 Leopard에서 다음 픽셀 값이있는 파일 :

[0 180 0]

이제 다음과 같은 픽셀 값이 있습니다.

[0 192 0]

색상이 수정되지 않은 비디오 프레임에 대해 QTMovie에게 요청하는 방법이 있습니까? 대신 cgimageref, ciimage 또는 cvpixelbufferref를 요구해야합니까? 비디오 파일을 읽기 전에 색상 보정을 완전히 비활성화하는 방법이 있습니까?

나는 nscalibratedcolrospace를 사용하여 nsbitmapimagerep로 끌어 들여이 문제를 해결하려고 시도했지만, 그것은 저의 길을 얻습니다.

// Create a movie
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys :
                      nsFileName, QTMovieFileNameAttribute,
                      [NSNumber numberWithBool:NO], QTMovieOpenAsyncOKAttribute,
                      [NSNumber numberWithBool:NO], QTMovieLoopsAttribute,
                      [NSNumber numberWithBool:NO], QTMovieLoopsBackAndForthAttribute,
                      (id)nil];
_theMovie = [[QTMovie alloc] initWithAttributes:dict error:&error];


// ....    

NSMutableDictionary *imageAttributes = [NSMutableDictionary dictionary];
[imageAttributes setObject:QTMovieFrameImageTypeNSImage forKey:QTMovieFrameImageType];
[imageAttributes setObject:[NSArray arrayWithObject:@"NSBitmapImageRep"] forKey: QTMovieFrameImageRepresentationsType];
[imageAttributes setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFrameImageHighQuality];

NSError* err = nil;
NSImage* image = (NSImage*)[_theMovie frameImageAtTime:frameTime withAttributes:imageAttributes error:&err];


// copy NSImage into an NSBitmapImageRep (Objective-C)
NSBitmapImageRep* bitmap = [[image representations] objectAtIndex:0]; 

// Draw into a colorspace we know about
NSBitmapImageRep *bitmapWhoseFormatIKnow = [[NSBitmapImageRep alloc] 
                                                initWithBitmapDataPlanes:NULL 
                                                pixelsWide:getWidth() 
                                                pixelsHigh:getHeight()
                                                bitsPerSample:8 
                                                samplesPerPixel:4 
                                                hasAlpha:YES 
                                                isPlanar:NO
                                                colorSpaceName:NSCalibratedRGBColorSpace 
                                                bitmapFormat:0
                                                bytesPerRow:(getWidth() * 4)
                                                bitsPerPixel:32];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithBitmapImageRep:bitmapWhoseFormatIKnow]];
[bitmap draw];
[NSGraphicsContext restoreGraphicsState];

이것은 '비 색상 수정 된'색상 공간으로 다시 변환되지만 색상 값은 테스트중인 압축되지 않은 AVI 파일에 저장된 것과 정확히 동일하지 않습니다. 또한 RGB-> "장치 rgb" -> rgb에서 변환되기 때문에 이것은 훨씬 덜 효율적입니다.

또한 64 비트 응용 프로그램에서 작업하고 있으므로 QuickTime-C API로 떨어지는 것은 옵션이 아닙니다.

당신의 도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

이것이 당신이 반대하는 것입니다. http://support.apple.com/kb/ht3712QT와 관련하여 여기에 설명 : http://developer.apple.com/library/mac/#technotes/tn2227/_index.html

Colorsync (자동 및 침묵)에 대한 옵트 아웃 플래그가 있어야하지만 ColorsYnc는 "Carbon-Pistent 시대"로 돌아 가기 때문에 64 비트 앱에서 비활성화하는 방법에 대해 많은 혼란이 있습니다. 존재할 수도 있고 문서가 없습니다. 그러나 Adobe조차도 Afaik (OS X의 64 비트 Photoshop? 리소스가 되십시오.) 그러나 64 비트 OS X 대 Windows 또는 32 비트에서 색상조차 다를 수 있다고 생각합니다.

첫 번째 링크는 1.8의 시스템 전체 및 비 프로그램 적으로 감마 값을 강제하는 방법을 알려줍니다. 그냥 지적하는 것만으로는 - 아마도 응용 프로그램에 제한된 사용 일뿐 만 아니라 알기에 좋습니다.

Colorsync를 비활성화하는 일반적인 방법은/였습니다

GraphicsImportSetFlags( gi, kGraphicsImporterDontUseColorMatching ); 

그러나 그것이 64 비트 응용 프로그램에서 작동하는지 모르겠습니다. 실제로, 색상 동기와 관련된 많은 것들이 64 비트에서는 아직 불가능할 것입니다. "사이트 : apple.com colorsync 64 비트"를 검색합니다.

더 나은 것을 발견하면 답을 편집 할 것입니다. 이것이 당신이 적을 아는 데 도움이 될 것이라고 생각했습니다.

또 다른 편집 : (RE) 비디오 태그는이 문제를 완화하거나 제거 할 수 있습니다. Colorsync는 태그가 지정되지 않은 비디오를 특정 방식으로 취급하고 (링크 참조) 태그에 따라 다르게 작동하기 때문입니다. 비디오의 색상 프로필은 무엇입니까? SRGB를 시도해 보시겠습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top