iPhone 7 上的广色域

Posted

技术标签:

【中文标题】iPhone 7 上的广色域【英文标题】:wide color on iPhone7 【发布时间】:2016-10-25 02:30:00 【问题描述】:

问题是:

在 iPhone7 上工作时,

我从UIView 得到CGContextRef,那么bitsPerPixel64。因为我的 .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 上的广色域的主要内容,如果未能解决你的问题,请参考以下文章

苹果iPhone 7发布:中国5388元起 9月16日上市

灵耀Pro14 2022能流畅运行adobe全家桶吗?求推荐笔记本电脑设计用

UIInterfaceOrientation 无法确定 iOS 7 和 iOS 8 iPhone 上的界面方向

HTML 文本输入会破坏 Iphone 6/7 plus 上的定位

在 iPhone 7 上的动画块冻结 UI 中调用 layoutIfNeeded

华为智慧屏se55参数 华为智慧屏se55怎么样