gpt4 book ai didi

ios - RGBA的CGColorSpace在哪里?

转载 作者:行者123 更新时间:2023-12-01 16:08:58 25 4
gpt4 key购买 nike

我正在尝试绘制一个从白色渐变为透明的阴影阴影的圆。我正在使用Core Graphics。

这是我从白色到黑色绘制渐变的内容:

let colorSpace = CGColorSpaceCreateDeviceRGB();
let colors = [UIColor.white.cgColor, UIColor.black.cgColor] as CFArray;
let locations : [CGFloat] = [0.0, 1.0];
let glowGradient : CGGradient = CGGradient.init(colorsSpace: colorSpace, colors: colors, locations: locations)!;
let ctx = UIGraphicsGetCurrentContext()!;
ctx.drawRadialGradient(glowGradient, startCenter: rectCenter, startRadius: 0, endCenter: rectCenter, endRadius: imageWidthPts/2, options: []);

但是,我不想画白色到黑色。我想从白色绘制为透明。

为此,我首先尝试将最终颜色更改为 UIColor.white.cgColor.copy(alpha: 0.0)(即透明白色)。但是,此操作失败:
fatal error: unexpectedly found nil while unwrapping an Optional value

我认为此错误是由于颜色超出了指定的RGB颜色空间( CGColorSpaceCreateDeviceRGB())。

解决方法似乎是将指定的颜色空间更改为带有alpha分量的颜色空间,例如RGBA。但是,这样的色彩空间似乎不存在!只有 CGColorSpaceCreateDeviceRGBCGColorSpaceCreateDeviceCMYKCGColorSpaceCreateDeviceGray

但是,没有可用的具有alpha分量的颜色空间是没有意义的。该文档明确描述了对渐变中Alpha的支持。 The documentation for CGGradient.init 说:

例如,如果颜色空间是RGBA颜色空间,并且您要在渐变中使用两种颜色(一种用于开始位置,另一种用于结束位置),则需要在 components中提供8个值-红色,绿色,蓝色和第一种颜色的alpha值,然后是第二种颜色的红色,绿色,蓝色和alpha值。

这种RGBA编码非常合理,但是由于没有RGBA色彩空间,因此无法告诉Core Graphics我正在使用这种RGBA编码!

RGBA的 CGColorSpace在哪里?

最佳答案

答案不太令人满意:您可以使用.colorSpace获得上下文的色彩空间。就我而言,这似乎给了我RGBA空间,但是我看不到任何保证。

这是使用.colorSpace的渐变:

let ctx = UIGraphicsGetCurrentContext()!;
let colorSpace = ctx.colorSpace!;
let colorComponents : [CGFloat] = [
// R G B A
1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 0.0,
];
let locations : [CGFloat] = [0.0, 1.0];
let glowGradient : CGGradient = CGGradient.init(
colorSpace: colorSpace,
colorComponents: colorComponents,
locations: locations,
count: locations.count
)!;
ctx.drawRadialGradient(glowGradient, startCenter: rectCenter, startRadius: 0, endCenter: rectCenter, endRadius: imageWidthPts/2, options: []);

在我的情况下,特别令人困惑的是, colorSpace.numberOfComponents的计算结果为3,即不是RGBA,但是它仍然可以正确解释渐变中的alpha分量。 ¯\_(ツ)_/¯

关于ios - RGBA的CGColorSpace在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39937142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com