从原始像素创建图像,但颜色无法根据 RGBA 十六进制值显示

Posted

技术标签:

【中文标题】从原始像素创建图像,但颜色无法根据 RGBA 十六进制值显示【英文标题】:Create an image from raw pixels, but color is not able to displayed according byRGBA hex value 【发布时间】:2016-01-03 03:28:15 【问题描述】:
    let colorSpace = CGColorSpaceCreateDeviceRGB()
    let bitmapInfo = CGBitmapInfo(rawValue: CGBitmapInfo.ByteOrder32Big.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue)


    let bitmap = CGBitmapContextCreate(nil, 192, 192, 8, 0, colorSpace,bitmapInfo.rawValue)

    let bitmapData = UnsafeMutablePointer<UInt32>(CGBitmapContextGetData(bitmap))
    var j = 0
    for var i = 0; i < 192; i++ 
        for j = 0; j < 192; j = j + 16 
            for var k = 0; k < 16; k++ 

                let offset = matrix.rows * i + j + k
                if(k < 4)
                    bitmapData[offset] = 0xff0000ff  //red
                
                else
                    bitmapData[offset] = 0xffff00ff  //yellow
                
            
        
    

    let imageRef = CGBitmapContextCreateImage(bitmap)
    let image = UIImage(CGImage: imageRef!)

以上是我从原始像素创建图像的代码。我设置颜色为 0xff0000ff 和 0xffff00ff。但是,当图像在 UIimageview 中显示时,它会显示一些随机颜色或无法显示颜色。

例如,当前颜色是0xffff00ff和0xff0000ff,但我的应用显示的是这样的:

有人知道如何为位图设置颜色吗?

【问题讨论】:

您可能只需要尝试 ARGB 而不是 RGBA。将 alpha 值放在红色、绿色和蓝色值之前。 【参考方案1】:

我在您的输出中看到红色和洋红色。你说你使用了颜色值0xffff00ff0xff0000ff。因此,我推断您的位图中的字节顺序是 ABGR。

如果您将 bitmapInfo 更改为 CGBitmapInfo.ByteOrder32Little.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue,您将获得所需的字节顺序。

【讨论】:

你能解释一下“CGBitmapInfo.ByteOrder32Little.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue”和“CGBitmapInfo.ByteOrder32Big.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue”有什么区别 一个将字节放入 RGBA odrer 中,另一个将它们按 ABGR 顺序排列。 但是我试过如果我删除CGBitmapInfo.ByteOrder32Big.rawValue这个条件,结果无法显示,为什么? 我不明白这个问题。 我的意思是,如果我写这样的“CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue)”没有“CGBitmapInfo.ByteOrder32Little.rawValue”,结果是无法显示图像或图像颜色错误.那么“CGBitmapInfo.ByteOrder32Little.rawValue”的功能是什么?

以上是关于从原始像素创建图像,但颜色无法根据 RGBA 十六进制值显示的主要内容,如果未能解决你的问题,请参考以下文章

从 RGBA 像素字节数据重构 UIImage 的问题

十六进制颜色到等效的 RGBa,允许透明度

iOS WKWebView 从点获取 RGBA 像素颜色

从原始 RGBa 数据创建 Sprite

将 8 位十六进制颜色转换为 rgba 颜色?

将十六进制转换为 RGBA