コンテキスト:私はOSXのアプリケーションにおける色赤(255,0,0)を充填したウインドウを表示しています表示する本当の色
。このウィンドウが表示されているときに私はスクリーングラブを行っています。今、私は、ウィンドウがペイントされたピクセルの値を読むと、ピクセルの値は実際には251,0,7です。
私はスクリーングラブをしている間に何かがうんざりしていると思ったので、私はMacのデジタルカラーユーティリティを使って色をチェックしました。同じ値 - 251,0,7を得ました。
画像をレンダリングするときに何か起こっていることを指摘しています。だから、私はもう1つの実験を次のように試してみました:すべてのピクセルにわたって赤色(255,0,0)で塗りつぶされたイメージを作成し、それをpngとしてエクスポートし、Macのイメージビューアで開きました。 OS自体でレンダリングされたこの画像では、デジタルカラーメーターを実行しましたが、まだピクセル値として251,0,7を得ました。
これはちょうどMacのことだと思いましたが、最後の実験として画像を自分宛に郵送し、画像ビューアを使ってGmailに開いてみました。
デジタルカラーメーター画像のピクセルの値255,0,0を示しています。つまり、何とかGoogleの画像ビューアが正確な色をレンダリングすることができるため、正確な色を表示することができます。
赤は正しく表示されますが(255,0,0)、緑と青は正しくありません。
質問:
誰かがマックで本当の色を表示する方法を示しリソース/コードに私を指すことができますか?言い換えれば、ウィンドウに色を表示する方法はありますか?表示されたウィンドウのscreengrabを実行すると、私が描いたのとまったく同じ色が得られますか?
アップデート:私は使用していた画像を追加する
。私は今使用しています
コード:ここで
NSRect windowRect = {200,200,200,200};//{m_windowOriginX, m_windowOriginY, m_windowSizeX, m_windowSizeY};
m_NSWindow = [[NSWindow alloc] initWithContentRect:windowRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
[m_NSWindow setTitle:@"overlayWindow"];
[m_NSWindow makeKeyAndOrderFront:nil];
g_imageView = [[NSImageView alloc] initWithFrame:NSMakeRect(0,0,200,200)];
[m_NSWindow.contentView addSubview:g_imageView];
NSColor *backgroundColor = [m_NSWindow backgroundColor];
backgroundColor = [NSColor clearColor];
[m_NSWindow setBackgroundColor:backgroundColor];
[m_NSWindow setOpaque:YES];
//[m_NSWindow setAlphaValue:1.0];
naivePremultiplyRGBAMat(m_paintBuffer);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bitmapContext = CGBitmapContextCreate(m_paintBuffer.data, 200, 200, 8, 800, colorSpace, kCGImageAlphaPremultipliedLast);
CFRelease(colorSpace);
CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);
CGContextRelease(bitmapContext);
naivePreMultiplyRGBAMat
は私が事前に乗算アルファ成分に書いたカスタム関数です。
NSSize imageSize = NSMakeSize(200,200);
NSImage* myImage = [[NSImage alloc] initWithCGImage: cgImage size: NSMakeSize(
CGBitmapContextGetWidth(bitmapContext),
CGBitmapContextGetHeight(bitmapContext))];
[g_imageView setImage:myImage];
表示色のプロファイルは影響を受けませんか? – trojanfoe
良い点。どの場合、現在の表示カラープロファイルがプログラムでレンダリングされた色にどのような変換を適用するかを知ることは可能でしょうか?この方法で、少なくとも私はscreengrabでどの色を期待すべきか知っています。今、私はscreengrabで色Xを得ることを望んで、私はそれを色Xを与えますが、私の得たものは、私の論理の残りの部分を混乱させる別の色、X 'です – TheBlueNotebook
しかし、知識。しかし、[This](https://developer.apple.com/library/ios/technotes/tn2313/_index.html)は興味深いようです。 – trojanfoe