如何在Swift中获取UIImage中像素的颜色?

佐伊特

我正在尝试使用Swift来获取UIImage中像素的颜色,但它似乎总是返回0。这是从@Minas在线程上得到的答案翻译的代码

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)) 

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

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在PyGame中获取屏幕上每个像素的颜色

来自分类Dev

如何在python中获取图像像素的RGBA颜色值

来自分类Dev

如何在c#中获取像素颜色

来自分类Dev

在Swift中获取UIImage的平均颜色

来自分类Dev

如何从图像中获取像素的颜色?

来自分类Dev

如何在Python中更改像素颜色

来自分类Dev

在Java中获取像素的颜色

来自分类Dev

在Android中获取像素颜色

来自分类Dev

如何在iOS中获取图像像素

来自分类Dev

如何在iOS中获取图像像素

来自分类Dev

如何在uiimage中查找特定颜色并更改该颜色

来自分类Dev

如何在 Swift 中的 UIImage 数组中识别点击的 UIImage

来自分类Dev

如何获取Java小程序中像素的颜色以生成图?

来自分类Dev

如何从图片框中获取特定像素的颜色?

来自分类Dev

在Android上获取背景中的像素颜色

来自分类Dev

从相机预览中获取触摸像素的颜色

来自分类Dev

无法获取画布中像素的颜色

来自分类Dev

如何在Android中获取Drawable的颜色

来自分类Dev

如何在轴标签中获取颜色

来自分类Dev

如何在Swift中更改UIBezierPath的颜色?

来自分类Dev

如何在Swift中更改文字颜色?

来自分类Dev

如何在xCode中从灰度图像获取像素的灰度值

来自分类Dev

如何在Android中获取显示器的像素值?

来自分类Dev

如何在xCode中从灰度图像获取像素的灰度值

来自分类Dev

如何在python中获取图像的边框像素?

来自分类Dev

在Swift中点获取像素颜色

来自分类Dev

如何在SWIFT中以编程方式设置UIImage的Alpha?

来自分类Dev

如何在 Swift 中裁剪 UIImage 以进行遮罩

来自分类Dev

如何在Swift 2.0中将多个UIImage存储在UIImage数组的每个索引中?

Related 相关文章

热门标签

归档