Я получаю цвет одного пикселя, используя функцию getPixelColor
ниже. Тем не менее, я не знаю, к какому точному пикселю обращаются от пройденного CGPoint
. Где я могу посмотреть «происхождение» CGImage
? Верхний левый? Нижний левый? Ничто действительно не имеет смысла с пиксельными цветами, которые я получаю с моими изображениями.Как визуализировать CGImage при извлечении пиксельных данных в swift
extension CGImage {
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)
}
}
Я думаю, что путаница лежит в пределах линии:
let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4
Я неясна о том, как осуществляется доступ к данным через эту Int
значение.
Заранее благодарен!
Таким образом, в этой строке кода, будет позиция (0,0) соответствует нижнему левому краю изображения? –
зависит, к сожалению, цветовая схема изображения. по историческим причинам Кварц использует систему координат Mac OS, которая является декартовой. В iOS положительный Y указывает вниз, поэтому его масштабируется на -Y или отражается относительно оси x. Иногда это может привести к тому, что изображение будет отображаться с ног на голову при использовании cgMethods. UIImage знает свою ориентацию и будет вращаться соответственно при рисовании. https://developer.apple.com/reference/uikit/uiimage/1624141-imageorientation –