簡體   English   中英

快速提取像素數據時如何可視化CGImage

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM