0

他の誰かが書いたコードを維持しています。Xcode4.5でビルドしてiOS6で実行すると、この実行時に「エラー」が発生します。

<Error>: The function `CGCMSUtilsGetICCProfileDataWithRenderingIntent' is obsolete and will be removed in an upcoming update. Unfortunately, this application, or a library it uses, is using this obsolete function, and is thereby contributing to an overall degradation of system performance. Please use `CGColorSpaceCopyICCProfile' instead.

このコードを実行するとき:

CGColorSpaceRef alternate   = CGColorSpaceCreateDeviceRGB();               
NSString *iccProfilePath = [[NSBundle mainBundle] pathForResource:@"sRGB Profile" ofType:@"icc"];
NSData *iccProfileData = [NSData dataWithContentsOfFile:iccProfilePath];
CGDataProviderRef iccProfile = CGDataProviderCreateWithCFData((CFDataRef)iccProfileData);

const CGFloat range[] = {0,1,0,1,0,1}; // min/max of the three components
CGColorSpaceRef colorSpace = CGColorSpaceCreateICCBased(3, range, iccProfile, alternate);

CGContextRef context = CGBitmapContextCreate(NULL, pageWidth, pageHeight, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast);

CGDataProviderRelease(iccProfile);

CGColorSpaceRelease(colorSpace);
CGColorSpaceRelease(alternate);

iOS 5.1で実行すると、エラーは発生しません。

次の変更を行うと、エラーが表示されないことがわかりました。

変化する:

NSString *iccProfilePath = [[NSBundle mainBundle] pathForResource:@"sRGB Profile" ofType:@"icc"];
NSData *iccProfileData = [NSData dataWithContentsOfFile:iccProfilePath];
CGDataProviderRef iccProfile = CGDataProviderCreateWithCFData((CFDataRef)iccProfileData);

に:

char fname[]= "sRGB Profile.icc";
CGDataProviderRef iccProfile = CGDataProviderCreateWithFilename(fname);

非推奨になっているCGDataProviderCreateWithCFDataへの参照が見つかりません。誰かが問題の原因を説明できますか?CGDataProviderCreateWithCFDataはCGCMSUtilsGetICCProfileDataWithRenderingIntent使用しており、CGDataProviderCreateWithFilenameはCGColorSpaceCopyICCProfile使用しているようです。これは、 CGDataProviderCreateWithCFDataが非推奨であることを示唆しています。私はこれを理解していないので、私が見つけた解決策に満足していません。また、私は解決策が誰かを助けることを願っています。

4

1 に答える 1

1

したがって、sRGB カラー プロファイル ファイルをアプリ リソースにアタッチし、iOS での実行時に sRGB カラー プロファイルを明示的に作成します。それは必要ですか?このドキュメントは、デバイス RGB が実際には sRGB 色空間であることを示唆しているようです。

Apple WWDC カラー マネージメント トーク

次のように呼び出すことができればいいのですが。

colorspace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);

しかし、これは iOS でもサポートされていないようです。

于 2012-10-07T21:47:03.497 に答える