像素的颜色仅适用于iPhone 6模拟器

时间:2016-04-01 07:53:59

标签: ios swift pixel rgba iphone-6

我需要读取位于图像中某个点的像素的颜色,以及我在除iPhone 6以外的所有iPhone(包括iPhone 6 Plus)的模拟器中使用的代码。

我不知道为什么,但我的猜测是像素的索引不正确,因为它检测到错误位置的颜色。 我感谢任何帮助。 这是我的代码。

UIGraphicsBeginImageContext(upperCaseView.frame.size)
upperCaseView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
snapshotImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(snapshotImage.CGImage))
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)

let pixelInfo: Int = ((Int(snapshotImage.size.width) * Int(point.y)) + Int(point.x)) * 4

print(data[pixelInfo])
print(data[pixelInfo+1])
print(data[pixelInfo+2])

1 个答案:

答案 0 :(得分:0)

非常感谢Scott Thompson。

我使用了CGImageGetBytesPerRow而不是图像宽度,现在它可以工作了。 正确的代码如下:

    UIGraphicsBeginImageContext(upperCaseView.frame.size)
    upperCaseView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
    snapshotImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(snapshotImage.CGImage))
    let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)

    let bytesPerPixel = (CGImageGetBitsPerPixel(snapshotImage.CGImage) / 8)
    let bytesPerRow = CGImageGetBytesPerRow(snapshotImage.CGImage)
    let pixelInfo: Int = (bytesPerRow * Int(point.y)) + (Int(point.x) * bytesPerPixel)

    print(data[pixelInfo])
    print(data[pixelInfo+1])
    print(data[pixelInfo+2])