Получение значения пикселя в оттенках серого в точке на UIImage даже до и после масштабирования или панорамирования (Swift) - PullRequest
1 голос
/ 26 мая 2019

Я хотел бы найти значение оттенка серого UIImage в градациях серого в данном CGPoint, а также сделать это, когда UIImage был увеличен и / или панорамирован.

До сих пор я мог извлечь значения в градациях серого из всего изображения, используя CGContext, а затем найти значение в градациях серого в точке (x, y) в одномерном массиве этих значений в градациях серого, используя индекс, заданный index = x * (ширина изображения) + у. Тем не менее, я не уверен, что делать, если увеличил изображение и / или сдвинул его после увеличения.

//Converts image to list of grayscale values
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]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...