0

クラスメソッドを追加するために NSColor を拡張します

+ (NSColor*) initWithHTMLString: (NSString*) rgb

NSWindow オブジェクトの背景色を設定します。

[self.window setBackgroundColor:[NSColor initWithHTMLString:@"37854F"]]
NSLog(@"Color=%@",[self.window.backgroundColor toHTMLRGB]);

プログラムを実行すると、ログ行は"Color=37854F". ただし、ツール PixelStick を使用して色ピクセルをドロップすると、ピクセルの色は ではなく37854F、色成分は元の色より少し小さくなります。

解決策を知っている人はいますか?

4

2 に答える 2

2

この違いの理由は、obj-c で作成された色が現在のカラー プロファイルを考慮して調整されるためです (システム設定 -> モニター -> 色を参照)。これは、複数のモニターがあり、実行中のアプリケーションをあるモニターから別のモニターにドラッグすると、同じ色が異なって表示されるほどです。残念ながら、colorWithDeviceRed:Green:Blue:Alpha の代わりに colorWithCalibratedRed:Green:Blue:Alpha を使用したとしても、特定のモニターで正確な色を使用することは非常に困難です。

色の知覚は複雑な問題であり、さまざまな出力デバイスが重要な役割を果たすため、1:1 マッピングがないのも不思議ではありません。しかし、両方が同じモニターで実行されている場合、色を作成し (ペイント アプリや色管理アプリ、デザイナー アプリなどで)、Cocoa でまったく同じ色を再作成することは実際に可能であるはずです。

ここで興味深いことに注意してください: OSX 上のデザイン (ブラウザーまたは PDF ファイルなどの画像) に色があり、仮想マシン (Parallels Desktop など) の Windows アプリでそのコンポーネント値を使用する場合、画面のカラーピッカーが示すように、正確な色を再現できます。

[更新]: システム カラー プロファイルを汎用プロファイルに設定するとカラー マッチングが解決されるため、このテクニカル Q&Aで説明されているように、コードで独自の汎用カラー スペースを作成することを検討する価値があるかもしれません。

[更新]: 私たち二人が探しているもののように見える別の NSColor メッセージを見つけました:

NSColor colorWithSRGBRed:green:blue:alpha

いくつかのテストで、色が正確であることがわかりました。残念ながら、このメッセージは 10.7 以降でのみ利用できます。

于 2013-04-11T07:13:36.057 に答える