2014-07-17 4 views
1

CMYK 색상 공간에 CGImage가 있습니다 (즉, CGImageGetColorSpace를 통해 쿼리 할 때 CGColorSpaceGetModel이 kCGColorSpaceModelCMYK를 반환합니다).CGImageDestination은 CMYK 색상 공간을 RGB로 저장합니다.

그러나 CGImageDestination을 통해 저장하려고하면 RGBColorSpace로 변환됩니다. 올바른 선택 값을 설정하려고했지만 아무 소용이 없습니다. 어떻게 알 수 있습니까? 미리보기로 저장된 이미지를 열면 일반 정보 탭에서 'ColorModel : RGB'및 '프로필 이름 : 일반 RGB 프로파일'이라고 알려줍니다. CGImageSource로 저장된 파일을 열고 속성을 읽으면 동일한 결과 (RGB 색상 모델, 일반 RGB 프로파일)가 나타납니다.

마지막으로 마지막 머리를 잃기 전에 (단수), 제 질문은 : 의도적입니까? ImageIO는 RGB 이외의 형식으로 이미지를 저장할 수 없습니까? 킥을 위해서 L * a * b 색상 공간을 사용하여 동일한 결과를 얻었으며 같은 결과를 얻었습니다. 내가 바라 보는거야 분명

BOOL saveImage(CGImageRef theImage, NSURL *fileDestination, NSString *theUTI) 
{ 

CGImageDestinationRef imageDestination = CGImageDestinationCreateWithURL((__bridge CFURLRef)fileDestination, (__bridge CFStringRef) theUTI, 1, nil); 

// now assemble the dictionary for saving 
NSMutableDictionary *theDict = nil; 
theDict = [[NSMutableDictionary alloc] initWithCapacity:10]; 
[theDict setObject:[NSNumber numberWithFloat:hdpi] forKey: (id) kCGImagePropertyDPIHeight]; 
[theDict setObject:[NSNumber numberWithFloat:vdpi] forKey: (id) kCGImagePropertyDPIWidth]; 
} 

// now make sure that we have the correct color space in the dictionary 
NSString *colorModel = nil; 
CGColorSpaceRef theColorSpace = CGImageGetColorSpace(theImage); 
CGColorSpaceModel theModel = CGColorSpaceGetModel(theColorSpace); 
switch (theModel) { 
    case kCGColorSpaceModelRGB: 
     colorModel = kCGImagePropertyColorModelRGB; 
     break; 

    case kCGColorSpaceModelLab: 
     colorModel = kCGImagePropertyColorModelLab; 
     break; 

    case kCGColorSpaceModelCMYK: 
     colorModel = kCGImagePropertyColorModelCMYK; 
     break; 

    default: 
     colorModel = kCGImagePropertyColorModelRGB; 
     break; 
} 
[theDict setObject:colorModel forKey:(id) kCGImagePropertyColorModel]; 

// Add the image to the destination, characterizing the image with 
// the properties dictionary. 
CGImageDestinationAddImage(imageDestination, theImage, (__bridge CFDictionaryRef) theDict); //properties); 

BOOL success = (CGImageDestinationFinalize(imageDestination) != 0); 
CFRelease(imageDestination); 
return success; 
} 

이 있어야 뭔가 :

여기 내 저장 코드입니다. 이 기능을 사용하려면 몇 가지 kCFSuperSecretProperty를 설정해야합니까? 또는 ImageIO가 단순히 CMYK로 저장되지 않습니까? 그 요인 경우

아, 내가 총알을 비트 애플의 엔지니어링 도움을받을 수 사건을 사용

답변

2

좋아, OSX 10.7 (사자)에 있어요. 여기에 자신의 대답입니다 :

대답은 두 부분이 있습니다 대상의 파일 형식이 색 공간 것을 지원하는 경우

1) ImageIO에서이 CMYK 및 연구소의 색 공간을 보존됩니다. 현재 CMYK를 지원하는 이미지 형식은 TIFF, PSD, JPEG 및 JPEG 2000입니다. 대상 파일 형식이 현재 색 공간을 지원하지 않으면 ImageIO가 표준 RGB 프로필로 변환됩니다. 당신은 PNG 또는 BMP 파일 형식으로 CMYK 이미지를 저장하려는 경우, 예를 들어, 일

2) ImageIO에서 수행하는 사양 상태에도 불구하고, JPEG 2000 CMYK 또는 연구소를 저장 하지 지원 파일 형식을 지원하는 CMYK 및 실험실 Apple Engineering은 현재 이것이 ImageIO의 단점임을 인정합니다. 이것은 미래에 변경 될 수 있습니다.

따라서 위의 코드는입니다. 파일 대상 유형 (UTI)을 직접 필터링하거나 사용자에게 전환이 임박했다는 경고를해야합니다. 앞으로 Apple이 JPEG 2000에 CMYK 및 Lab 지원을 추가 할 때 필터 기능을 변경해야하지만 코드는 동일하게 유지 될 수 있습니다.

관련 문제