在Swift中的UILabel后面的UIImageView中获取像素的RGB值或像素的平均RGB值

时间:2015-11-14 15:45:14

标签: xcode swift optimization uiimageview uilabel

我的UILabel位于UIImageView之上。 UIImageView可以更改显示各种图像。根据{{​​1}}中显示的图片,UIImageView的文字颜色必须能够动态更改。例如,当显示浅色图像时,将使用深色UILabel文本颜色,或者当使用深色图像时,将使用浅色文本颜色。

在Swift中,提取单个像素的RGB值或直接位于UILabel位置后面的一组像素的平均RGB值的最佳,简单,最有效的方法是什么? {1}}?

或者甚至更好,在Swift中,有一种UILabel方法可以根据文本颜色的上方位置动态更改文本颜色吗?

谢谢。

enter image description here

1 个答案:

答案 0 :(得分:0)

老实说,我甚至不会抓住RGB,你应该知道你在UIImageView中放置了什么图像,所以根据它来规划标签。

如果你必须选择RGB,那么就这样做:

    UIGraphicsBeginImageContext(CGSizeMake(1,1));
    let context = UIGraphicsGetCurrentContext()
    //We translate in the opposite direction so that when we draw to the canvas, it will draw our point at the first spot in readable memory
    CGContextTranslateCTM(context, -x, -y);
    // Make the CALayer to draw in our "canvas".
    self.layer.renderInContext(context!);

    let colorpoint  = UnsafeMutablePointer<UInt32>(CGBitmapContextGetData(context));
    UIGraphicsEndImageContext();

x和y是你想要抓住的点,而self是你的UIImageView。

编辑:@ Mr.T发布了一个指向如何完成此操作的链接,如果您需要平均值,只需将UIGraphicsBeginImageContext(CGSizeMake(1,1));更改为UIGraphicsBeginImageContext(CGSizeMake(width,height));并计算平均值即可获得所需的像素数量有这个数据