【问题标题】:How do I find alpha values for the various pixels of a CGImage? [duplicate]如何找到 CGImage 的各个像素的 alpha 值? [复制]
【发布时间】:2019-10-25 16:35:40
【问题描述】:

如何找到 CGImage 的各个像素的 alpha 值?

CGImagedecode 属性返回了一个数组。需要探测这个数组的值吗?

或者我应该查看dataProvider 属性吗?

我想遍历像素并获取每个像素的 alpha 值。

编辑:

链接为重复的问题是一个objective-c 问题。我只知道斯威夫特。

【问题讨论】:

    标签: swift image core-graphics


    【解决方案1】:

    您询问了 CGImage,但这应该相对容易修改。我确实认为需要探测这个数组的值,所以你可以这样做:

    func imageIsEmpty(_ image: UIImage) -> Bool {
        guard let cgImage = image.cgImage,
              let dataProvider = cgImage.dataProvider else
        {
            return true
        }
    
        let pixelData = dataProvider.data
        let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
        let imageWidth = Int(image.size.width)
        let imageHeight = Int(image.size.height)
        for x in 0..<imageWidth {
            for y in 0..<imageHeight {
                let pixelIndex = ((imageWidth * y) + x) * 4
                let r = data[pixelIndex]
                let g = data[pixelIndex + 1]
                let b = data[pixelIndex + 2]
                let a = data[pixelIndex + 3]
                if a != 0 {
                    if r != 0 || g != 0 || b != 0 {
                        return false
                    }
                }
            }
        }
    
        return true 
     }
    

    我从How to check if a uiimage is blank? (empty, transparent)@mattdedek 找到了这个答案

    他使用这篇文章提出了他的解决方案: Get Pixel Data of ImageView from coordinates of touch screen on xcode?

    【讨论】:

    • 问题已更新。您应该更新答案以符合新要求。
    • 这个答案存在严重问题。它假设像素数据为 RGBA 格式,每像素 32 位。这可能适用于某些图像,但不适用于所有图像。
    • 感谢您在原始问题中添加链接 :) 我还不能发表评论,否则我可能会避免发布答案并简单地链接到我的来源......无论如何,我会考虑一下如何改进这种方法。只要没有标记为解决方案的答案我都可以删除,所以如果我没有想出解决问题的方法,我会在以后删除它~
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多