对于我的应用程序,我使用用户选择的图像作为背景,上面的文本使用 kCGBlendingModeOverlay 混合在一起。在某些图像上很好,但在明亮的图像上文字不清晰。我知道 Apple 在 iOS 7 中使用一种算法来根据以下内容更改文本颜色,但我的问题是我将如何实现它。我已经四处搜索,但到目前为止还没有找到与此相关的任何内容。有人知道我可以从哪里开始吗?
谢谢
对于我的应用程序,我使用用户选择的图像作为背景,上面的文本使用 kCGBlendingModeOverlay 混合在一起。在某些图像上很好,但在明亮的图像上文字不清晰。我知道 Apple 在 iOS 7 中使用一种算法来根据以下内容更改文本颜色,但我的问题是我将如何实现它。我已经四处搜索,但到目前为止还没有找到与此相关的任何内容。有人知道我可以从哪里开始吗?
谢谢
我们使用这种灰度计算,基本上以与人眼相同的方式对颜色进行加权。
眼睛对不同颜色的敏感度不同,因此 N 个绿色光子会比 N 个蓝色光子显得更亮。
lColorIndex := ( (r * 77 + g * 151 + b * 28) shr 8 );
if (lColorIndex < 130) then
ForegroundColor := clWhite
else
ForegroundColor := clBlack;
这只是一个像素计算,所以你必须对你正在查看的区域进行平均(当然在计算之前平均 R、G、B)
背景:
我们看到的亮度或多或少:
v = 59% 的绿色、30% 的红色和 11% 的蓝色通道
= (30 * r + 59 * g + 11 * b) div 100
接近于:
v = (77 * r + 151 * g + 28 * b) div 256
v = (77 * r + 151 * g + 28 * b) shr 8
在计算机世界中计算速度更快。