匹配AppKit和SpriteKit颜色

9
我正在为macOS构建一个小型实用程序,将SpriteKit与AppKit相结合。具体而言,我正在使用SKView作为应用程序窗口的“背景”(主要用于特定类型的SpriteKit动画)。 我还更改了窗口的背景属性的颜色以调整标题栏的颜色。在绿色和红色之间切换。
我遇到的问题是匹配AppKit和SpriteKit之间的颜色。简而言之,它们不匹配。正如您可以在图像中看到的那样,标题栏与SKView有点不同。

enter image description here

玩了一会儿后,我发现SKView中的背景颜色是在“设备RGB颜色空间”中,而窗口的颜色是在“sRGB IEC61966-2.1颜色空间”中。我将AppKit颜色更改为设备RGB,但颜色仍然不匹配。

我使用普通的NSColor初始化器创建颜色。

我不确定是否可以更改颜色的颜色空间。Window和SKView的backgroundColor属性只读。

有什么想法吗?


听起来很烦人!! 我知道osX的SKColor是NSColor,iOS的SKColor是UIColor...也对学习更多感兴趣! - Fluidity
首先在UIView中使用SpriteKit场景 将所有的R、G、B、A值分解开来 然后将R与R进行匹配,以此类推。 - M Faheem Rajput
2个回答

1
如果我理解正确,你想要做的是匹配颜色,那么你可以像这样做:yourAppKit.backgroundColor = yourSKView.backgroundColor,这样它们就会相等。
我的第二个问题是,你需要它们匹配吗?大多数情况下,人们不会注意到,如果他们注意到了,他们也不会在意。
此外,这里有一些关于将RGB转换为sRGB的数据RGB to sRGB

是的,它们需要匹配。我想我可以故意将它们分开并使其有目的性,但这不是我想要的。 - Hartix
你能否编辑你的回答并附上一些屏幕截图,这样我就可以清楚地看到你的意思了(使用shift+cmd+4来截取选定区域的屏幕截图)? - E. Huckabee

0
我的猜测是这是由于NSWindow.StyleMask.fullSizeContentView。当设置了这个属性时,默认情况下标题栏会应用模糊效果。
如果你想要颜色保持一致,告诉窗口使用透明的标题栏即可。
window.titlebarAppearsTransparent = true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接