Я пытался использовать приведенный ниже код для извлечения значения градаций серого, связанного с данным пикселем моего изображения.Я думал, что это работает, но потом я заметил, что мои результаты не соответствуют моему изображению.
Как я могу получить правильное значение оттенков серого для данного пикселя моего изображения в (x, y) из массива 1D, который мойФункция pixelValues возвращает?
Я пытался использовать index = x * width of image + y, но это, похоже, не работает.
func pixelValues(fromCGImage imageRef: CGImage?) -> (pixelValues: [UInt16]?, width: Int, height: Int)
{
var width = 0
var height = 0
var pixelValues: [UInt16]?
if let imageRef = imageRef {
width = imageRef.width
height = imageRef.height
let bitsPerComponent = imageRef.bitsPerComponent
let bytesPerRow = imageRef.bytesPerRow
let totalBytes = height * width
let colorSpace = CGColorSpaceCreateDeviceGray()
var intensities = [UInt16](repeating: 0, count: totalBytes)
let contextRef = CGContext(data: &intensities, width: width, height: height, bitsPerComponent: bitsPerComponent, bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: 0)
contextRef?.draw(imageRef, in: CGRect(x: 0.0, y: 0.0, width: CGFloat(width), height: CGFloat(height)))
pixelValues = intensities
}
return (pixelValues ,width, height)
}
//Returns grayscale value of image at pixel (x,y)
func getGrayValue(pixelValues: [UInt16], width: Int, x: Int, y: Int) -> UInt16 {
let i = x*width + y
return pixelValues[i]
}