[英]How to visualize the CGImage when extracting pixel data in swift
我正在使用下面的getPixelColor
函數獲得一個像素的顏色。 但是,我不清楚從傳遞的CGPoint
訪問哪個確切像素。 我在哪里可以看到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
值訪問數據。
提前致謝!
像素為32位4字節(按RGBA順序)。 它們成排排列,一個接一個。 因此,要獲取像素行,您需要將指針按行* rowWidthInBytes前進。 rowWidthInBytes只是寬度乘以numberOfBytesPerPixel(4)。 要獲取該列,您只需添加yOffset * numberOfBytesPerPixel。 等式如下所示:
pixelOffset = row * rowWidthInBytes + yOffset * numberOfBytesPerPixel
重新排列:
pixelOffset = row * (width * numberOfBytesPerPixel) + yOffset * numberOfBytesPerPixel
pixelOffset = (row * width + yOffset) * numberOfBytesPerPixel
pixelOffset = (width * row + yOffset) * numberOfBytesPerPixel
更改名稱並將一些CGFloat轉換為Int轉換,這是:
let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.