从Alpha +背景计算不透明颜色?

xx

我想通过对它应用0.3的alpha值来“变亮”某种颜色。这在白色背景上显示。

我想确定与白色背景上显示的半透明颜色相对应的不透明颜色。原因是我将其用作视图控制器的背景色,并且当该背景为半透明时,过渡效果很差。

我没有尝试过任何东西,因为除了可能拍摄快照并获得其颜色外,没有一个合理的方法来解决这个问题,但这似乎有点过头了。找不到任何信息,搜索结果到处都是“如何使背景半透明”等

编辑:将imataptool的答案部分放在一起(并移植到Swift),这是我想出的:

extension UIColor {

    static func opaqueColorByDisplayingTransparentColorOnBackground(transparentColor: UIColor, backgroundColor: UIColor) -> UIColor {

        let bgView = UIView(frame: CGRectMake(0, 0, 1, 1))
        bgView.backgroundColor = backgroundColor
        let overlayView = UIView(frame: CGRectMake(0, 0, 1, 1))
        overlayView.backgroundColor = transparentColor
        bgView.addSubview(overlayView)

        let image = UIView.imageWithView(bgView)

        let provider = CGImageGetDataProvider(image.CGImage)
        let pixelData = CGDataProviderCopyData(provider)
        let data = CFDataGetBytePtr(pixelData)

        return UIColor(
            red: CGFloat(data[0]) / 255.0,
            green: CGFloat(data[1]) / 255.0,
            blue: CGFloat(data[2]) / 255.0,
            alpha: 1
        )
    }
}

extension UIView {

    // src http://stackoverflow.com/a/32042439/930450
    class func imageWithView(view: UIView) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0)
        view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
        let img = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return img
    }
}
埃里克·米切尔

编辑1:这并不是说这是实现特定目标的最佳方法,但是它确实解决了获得具有特定不透明度的两种颜色混合的RGB的问题。您没有提供足够的信息来说明我到底在做什么,以便给出更具体的答案。但是,如果此解决方案以令人满意的性能满足您的需求,那么请运行该解决方案。

编辑2:有关在iOS 7上将UIView渲染为位图的新(ish)方法,请参阅此问题与解答(因此,如果您支持iOS 6,则可以忽略此方法,但这不太可能)。本文的要旨是您现在可以使用UIView方法 -drawViewHierarchyInRect:(CGRect)afterScreenUpdates:(BOOL)

我不能说是否存在一种数学方法来计算确切的答案,但是一种解决方法是:

  1. 将两个视图添加到父视图(不透明视图在透明视图下方)
  2. 将父视图(及其所有子视图)转换为UIImage
  3. 对UIImage采样以获取其组成的颜色

做1是微不足道的。你可以做2

UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, [[UIScreen mainScreen] scale]);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage* img = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return img;

现在img包含具有所需颜色的图像。现在,您只需要弄清楚它是由什么颜色组成的。我相信您可以使用此答案中提供的代码来做到这一点为了方便起见,我将其复制到此处。

CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
const UInt8* data = CFDataGetBytePtr(pixelData);

int pixelInfo = ((image.size.width  * y) + x ) * 4; // The image is png

UInt8 red = data[pixelInfo];         // If you need this info, enable it
UInt8 green = data[(pixelInfo + 1)]; // If you need this info, enable it
UInt8 blue = data[pixelInfo + 2];    // If you need this info, enable itgame
CFRelease(pixelData);

redgreenblue现在包含在任何你指出你的观点挑颜色的RGB值。您不妨只是去中间。同样,为了提高此过程的性能,您可以选择仅对所查看视图的一小部分成像(可能只有一个像素)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

依次更改背景不透明度(alpha级别)

来自分类Dev

将Alpha /不透明度应用于背景图像

来自分类Dev

无法以编程方式更改不透明度(alpha)

来自分类Dev

在斑点密集的区域,alpha仍不透明的散点图

来自分类Dev

使Alpha通道/不透明度用于照明

来自分类Dev

点样在Adobe Photoshop中的不透明度/ alpha?

来自分类Dev

maxscript透明背景(alpha)

来自分类Dev

UIWebView的内容背景颜色不透明

来自分类Dev

多种背景和颜色不透明

来自分类Dev

找到父背景颜色不透明

来自分类Dev

设置WPF标签内容Alpha透明度而不是整个控件的不透明度

来自分类Dev

如何使共享的NSColorPanel进入显示Alpha /不透明度滑块?

来自分类Dev

如何在Game Maker中以逐渐增加的alpha(不透明度)绘制精灵?

来自分类Dev

如何删除不透明度但保留UIImage的Alpha通道?

来自分类Dev

从SKTexture(data:size :)创建的SKSpriteNode出现Alpha问题(不透明度)

来自分类Dev

什么可以渲染更快的预定义图像Alpha或不透明度?

来自分类Dev

glBlendFunc(GL_ZERO,GL_ONE_MINUS_SRC_ALPHA)显示为黑色,不透明

来自分类Dev

为什么将我的带Alpha的ImageView放在不透明的ImageView上不可见?

来自分类Dev

如何删除不透明度但保留UIImage的Alpha通道?

来自分类Dev

如何修改Alpha预乘图像不透明度?

来自分类Dev

如何设置此详细信息视图Alpha 1.0,在iOS中不透明?

来自分类Dev

更改EditText alpha而不影响可绘制和文本的不透明度

来自分类Dev

在金属中混合:alpha 设置为 0 仍然不透明

来自分类Dev

如何更改Python matplotlib面片多边形中边线的不透明度/透明度(alpha)?

来自分类Dev

不透明之前加载CSS rgba背景颜色

来自分类Dev

如何通过CSS设置不透明的背景颜色?

来自分类Dev

在Google Android v2中使用形状/平铺设置不透明度/ alpha

来自分类Dev

文本不透明时的不透明背景

来自分类Dev

仅更改背景颜色的Alpha通道

Related 相关文章

  1. 1

    依次更改背景不透明度(alpha级别)

  2. 2

    将Alpha /不透明度应用于背景图像

  3. 3

    无法以编程方式更改不透明度(alpha)

  4. 4

    在斑点密集的区域,alpha仍不透明的散点图

  5. 5

    使Alpha通道/不透明度用于照明

  6. 6

    点样在Adobe Photoshop中的不透明度/ alpha?

  7. 7

    maxscript透明背景(alpha)

  8. 8

    UIWebView的内容背景颜色不透明

  9. 9

    多种背景和颜色不透明

  10. 10

    找到父背景颜色不透明

  11. 11

    设置WPF标签内容Alpha透明度而不是整个控件的不透明度

  12. 12

    如何使共享的NSColorPanel进入显示Alpha /不透明度滑块?

  13. 13

    如何在Game Maker中以逐渐增加的alpha(不透明度)绘制精灵?

  14. 14

    如何删除不透明度但保留UIImage的Alpha通道?

  15. 15

    从SKTexture(data:size :)创建的SKSpriteNode出现Alpha问题(不透明度)

  16. 16

    什么可以渲染更快的预定义图像Alpha或不透明度?

  17. 17

    glBlendFunc(GL_ZERO,GL_ONE_MINUS_SRC_ALPHA)显示为黑色,不透明

  18. 18

    为什么将我的带Alpha的ImageView放在不透明的ImageView上不可见?

  19. 19

    如何删除不透明度但保留UIImage的Alpha通道?

  20. 20

    如何修改Alpha预乘图像不透明度?

  21. 21

    如何设置此详细信息视图Alpha 1.0,在iOS中不透明?

  22. 22

    更改EditText alpha而不影响可绘制和文本的不透明度

  23. 23

    在金属中混合:alpha 设置为 0 仍然不透明

  24. 24

    如何更改Python matplotlib面片多边形中边线的不透明度/透明度(alpha)?

  25. 25

    不透明之前加载CSS rgba背景颜色

  26. 26

    如何通过CSS设置不透明的背景颜色?

  27. 27

    在Google Android v2中使用形状/平铺设置不透明度/ alpha

  28. 28

    文本不透明时的不透明背景

  29. 29

    仅更改背景颜色的Alpha通道

热门标签

归档