2010年3月3日水曜日

NSPNGFileTypeの埋込みカラープロファイル

10.6からか10.6.xになってからだと思うがWebViewの[nsBitmapImageRep initWithFocusedViewRect:]の出力にカラープロファイルがディスプレイのカラーの内容で追加されるようになったように思う.そのためかPNGで書き出すとColorSyncプロファイル(iCCPチャンク)が付いてくる.


下記のようにすると自分で指定できるらしい.
PNGフォーマット/iCCPチャンクについてはココをみた.感謝!

前のエントリーを例にwebViewProgressFinished:を変更

- (void)webViewProgressFinished:(NSNotification*)notification
{
[webView lockFocus];
NSBitmapImageRep *viewImageRep= [[NSBitmapImageRep alloc] initWithFocusedViewRect:[webView bounds]];

NSString *pathToProfile= @"/System/Library/ColorSync/Profiles/Generic RGB Profile.icc";
NSData *colorProfile = [NSData dataWithContentsOfFile:pathToProfile];
[viewImageRep setProperty:NSImageColorSyncProfileData withValue:colorProfile];


NSDictionary *properties= [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat:1.0], NSImageCompressionFactor,
nil];
NSData *pngImageData= [viewImageRep representationUsingType:NSPNGFileType
properties:properties];
[pngImageData writeToFile:@"/path/to/output.png"
atomically:YES];
[webView unlockFocus];
}





・propertiesにNSImageColorSyncProfileDataをキーに[NSColorSpace genericRGBColorSpace]とか入れてみたけど見当違いみたいで効果がなかったw.
・ [viewImageRep setProperty:NSImageColorSyncProfileData withValue:nil];にしたらiCCPチャンクが付かなくなる.

0 件のコメント: