我嘗試了不同的解決方案(例如this one),但顏色我回來看起來比真實圖像中的有點不同。我想這是因爲圖像只是RGB
,不RGBA
。可能是一個問題?斯威夫特3:獲取像素的顏色在UIImage的(更好:UIImageView的)
相關問題:如果UIImage有contentMode = .scaleAspectFill
,我必須重新計算圖像還是隻能使用imageView.image
?
編輯:
我用這個擴展的嘗試:
extension CALayer {
func getPixelColor(point: CGPoint) -> CGColor {
var pixel: [CUnsignedChar] = [0, 0, 0, 0]
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
let context = CGContext(data: &pixel, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)
context!.translateBy(x: -point.x, y: -point.y)
self.render(in: context!)
let red: CGFloat = CGFloat(pixel[0])/255.0
let green: CGFloat = CGFloat(pixel[1])/255.0
let blue: CGFloat = CGFloat(pixel[2])/255.0
let alpha: CGFloat = CGFloat(pixel[3])/255.0
let color = UIColor(red:red, green: green, blue:blue, alpha:alpha)
return color.cgColor
}
}
但對某些圖像就好像座標系轉了一圈,其他的我變得很錯誤的價值觀......我是什麼我錯過了嗎?
編輯2:
我嘗試用這些圖片:
https://dl.dropboxusercontent.com/u/119600/gradient.png https://dl.dropboxusercontent.com/u/119600/[email protected]
,但我得到錯誤的價值觀。它們嵌入在UIImageView
但我轉換座標:
private func convertScreenPointToImage(point: CGPoint) -> CGPoint {
let widthMultiplier = gradientImage.size.width/UIScreen.main.bounds.width
let heightMultiplier = gradientImage.size.height/UIScreen.main.bounds.height
return CGPoint(x: point.x * widthMultiplier, y: point.y * heightMultiplier)
}
這一個
在iPhone模擬器7,這是不正確運行的時候給我=== Optional((51, 76, 184, 255))
...
我不能讓它正常工作,我仍然得到錯誤的價值:(請參閱我的編輯 – swalkner
代碼是正確的,我剛剛檢查了您的第一張圖片,我打開Photoshop,切換到吸管工具,並打開。該信息的調色板我懸停在x = 120的像素中,Y = 500和Photoshop說R:175 G:146b的232我運行在遊樂場的代碼和我得到紅175,綠:146,藍:232,阿爾法:255.什麼是你的輸入和你有什麼預期產出 –
我得到不同的值(見我的編輯) - 你如何加載圖像 – swalkner