Когда я посмотрел дальше на данные, возвращенные с CGImage dataProvider
, я заметил числа, повторяющиеся в наборах по 8:
127, 134, 255, 251, 95, 211, 255, 255
127, 134, 255, 251, 95, 211, 255, 255
127, 134, 255, 251, 95, 211, 255, 255
В предыдущих решениях, которые я обнаружил, не используются наборы по 8они используют строгие наборы из 4, как в коде, который я скопировал из ответа, найденного в ImageProcessor
.Я знаю, что существуют разные каналы и глубины и другая терминология для работы с цветами.Три строки выше, я предполагаю, представляют три пикселя подряд.Затем есть 4 канала RGBA, но они разделены на набор чисел: 2 для красного, 2 для зеленого и т. Д. Я вижу, что альфа-канал полностью установлен на 255 255
, что имеет смысл, учитывая контекст снимок экрана используется.
Мой вопрос:
Как объединить эти "каналы", если это правильный термин, в 4 используемых числа для RGBA?Как я могу слить 127 134
в красный, 255 251
в зеленый и т. Д.?Нужно ли мне использовать какое-то смещение байтов (что я не знаю, как это сделать), чтобы объединить числа только в 4 значения?
Код для контекста:
(От ответа не требуется)
Я пытаюсь извлечь цвет для отдельного пикселя в изображении на iOS с помощью Swift 4. Я хочу получить пиксель, а затем выполнить операции на основе пикселяданные для графического редактора, над которым я работаю.Это скриншот, с которого я хочу получить пиксель с координатой.
Я искал несколько мест для ответа на мой вопрос, но по какой-то причине все найденные ответы не дают UIColor
которые соответствуют цвету с картинки.
Попытки решения : 1 2 3 ... и еще десятки

Текущее изображение, которое я использую (снято с приложением pixel ).Все изображение, за исключением нескольких черных текстовых областей, должно содержать данные о пикселях, соответствующие показанному шестнадцатеричному цвету: # 4DFFD0 .
Я набрал следующий код из различных "ответов" по всейИнтернет, и все дают неправильные цвета.
Чтобы получить цвет в пикселе ( Внутри класса ImageProcessor
):
var image: UIImage
func color(at pos: CGPoint) -> UIColor {
let pixelData = image.cgImage!.dataProvider!.data!
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
let pixelInfo: Int = ((Int(image.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)
}
Загрузить изображение и получить цвет ( Внутри ViewController.swift
):
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "mediaSubtype = %d", PHAssetMediaSubtype.photoScreenshot.rawValue)
let scFetch = PHAsset.fetchAssets(with: .image, options: fetchOptions)
if (scFetch.count > 0) {
let lastSC = getUIImage(asset: scFetch.lastObject!)
let processor = ImageProcessor(currentImage: lastSC!)
let cornerColor = processor.color(at: 0, y: 0)
// ...
}
Всякий раз, когда я смотрю на значение cornerColor
, цвет в верхнем левом углу изображения ,он возвращает числа 127 134 255 251
, которые cornerColor
использует в качестве значений RGBA.