iPhone 7 上的广色域
Posted
技术标签:
【中文标题】iPhone 7 上的广色域【英文标题】:wide color on iPhone7 【发布时间】:2016-10-25 02:30:00 【问题描述】:问题是:
在 iPhone7 上工作时,
我从UIView
得到CGContextRef
,那么bitsPerPixel 是64。因为我的 .a 只能使用 bitsPerPixel 为 32 的传统 RGB 颜色空间位图缓冲区,
有人知道如何将色彩空间为广色域的CGContextRef
转换为tranditional CGContextRef
,就像在iPhone6 上一样吗?
【问题讨论】:
这只是一个想法。好的,宽颜色是一个特征(UIDisplayGamut)。因此,也许您可以使用自定义容器视图控制器,这样您就可以调用setOverrideTraitCollection(_:forChildViewController:)
并欺骗您的子视图控制器,使其相信它在没有宽颜色的设备上运行。
@matt 非常感谢 anwser,我会试一试。昨天想办法处理宽色,设置UIView的图层属性“contentsFormat”为kCAContentsFormatRGBA8Uint,那么从runtime得到的CGContextRef就是32 bitsPerPixel
如果可行,您应该将其发布为答案!这种宽颜色的东西肯定会引起一些混乱,所以你在这里的工作可能对其他人非常有用。 (另外请注意,我不知道我的想法是否可行!我需要你为我尝试一下。)
@matt 我试过你的想法,但似乎失败了。但我发现的方法很好用。
太好了。请将其发布为答案!
【参考方案1】:
解决方法如下:
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_3
-(void) layerWillDraw:(CALayer *)layer
if( [[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0 )
NSString* format = layer.contentsFormat;
if( ![format isEqualToString:kCAContentsFormatRGBA8Uint] )
layer.contentsFormat = kCAContentsFormatRGBA8Uint;
#endif
将上面的代码添加到要绘制的视图中,然后从视图中获取的 CGContextRef 是传统的,就像在 iPhone6 上一样
【讨论】:
以上是关于iPhone 7 上的广色域的主要内容,如果未能解决你的问题,请参考以下文章
灵耀Pro14 2022能流畅运行adobe全家桶吗?求推荐笔记本电脑设计用
UIInterfaceOrientation 无法确定 iOS 7 和 iOS 8 iPhone 上的界面方向
HTML 文本输入会破坏 Iphone 6/7 plus 上的定位