0
我使用下面的getPixelColor
函數獲取一個像素的顏色。但是,我不清楚從傳遞的CGPoint
正在訪問哪個確切的像素。我在哪裏可以看到CGImage
的「原點」是?左上角?左下?用我的圖像獲得的像素顏色都沒有意義。如何在快速提取像素數據時可視化CGImage
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)對應於圖像的左下角? –
不幸的是取決於圖像的方向。由於歷史原因,Quartz使用笛卡爾的Mac OS座標系。在iOS中,正Y指向下,所以它由-Y縮放或反映在x軸上。這有時會導致圖像在使用cgMethods時顛倒。 UIImage知道它的方向,並在繪圖時相應地旋轉。 https://developer.apple.com/reference/uikit/uiimage/1624141-imageorientation –