gpt4 book ai didi

ios - 如何使用 Swift 获取 UIImage 中像素的颜色?

转载 作者:IT王子 更新时间:2023-10-29 05:00:28 24 4
gpt4 key购买 nike

我正在尝试使用 Swift 获取 UIImage 中像素的颜色,但它似乎总是返回 0。这是代码,翻译自@Minas 在 this 上的回答。主题:

func getPixelColor(pos: CGPoint) -> UIColor {
var pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage))
var data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)

var pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4

var r = CGFloat(data[pixelInfo])
var g = CGFloat(data[pixelInfo+1])
var b = CGFloat(data[pixelInfo+2])
var a = CGFloat(data[pixelInfo+3])

return UIColor(red: r, green: g, blue: b, alpha: a)
}

提前致谢!

最佳答案

由于我遇到了类似的问题,因此进行了一些搜索。你的代码工作正常。问题可能来自您的图像。

代码:

  //On the top of your swift 
extension UIImage {
func getPixelColor(pos: CGPoint) -> UIColor {

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

let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4

let r = CGFloat(data[pixelInfo]) / CGFloat(255.0)
let g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0)
let b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0)
let a = CGFloat(data[pixelInfo+3]) / CGFloat(255.0)

return UIColor(red: r, green: g, blue: b, alpha: a)
}
}

发生的事情是此方法将从图像的 CGImage 中选取像素颜色。因此,请确保您是从正确的图像中挑选的。例如如果您的 UIImage 是 200x200,但来自 Imgaes.xcassets 或任何来源的原始图像文件是 400x400,并且您正在选择点 (100,100),那么您实际上是在选择图像左上部分的点,而不是中间。

两种解决方案:
1,使用Imgaes.xcassets中的图片,并且只在1x字段中放置一张@1x图片。将@2x、@3x 留空。确保您知道图像大小,然后选择一个在该范围内的点。

//Make sure only 1x image is set
let image : UIImage = UIImage(named:"imageName")
//Make sure point is within the image
let color : UIColor = image.getPixelColor(CGPointMake(xValue, yValue))

2,按比例放大/缩小 CGPoint 以匹配 UIImage。例如let point = CGPoint(100,100) 在上面的例子中,

let xCoordinate : Float = Float(point.x) * (400.0/200.0)
let yCoordinate : Float = Float(point.y) * (400.0/200.0)
let newCoordinate : CGPoint = CGPointMake(CGFloat(xCoordinate), CGFloat(yCoordinate))
let image : UIImage = largeImage
let color : UIColor = image.getPixelColor(CGPointMake(xValue, yValue))

我只测试了第一种方法,我正在使用它从调色板中获取颜色。两者都应该工作。快乐编码:)

关于ios - 如何使用 Swift 获取 UIImage 中像素的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com