Прошу простить об этом, но я не могу понять, как представить UIImage как массив UIColor для каждого пикселя. Я попытался изо всех сил с преобразованием UIImagePNG/JPEGRepresentation
, но не смог получить желаемый результат.UIImage to UIColor массив пиксельных цветов
ответ
Это просто перевод Swift Olie's answer на тот же вопрос в ObjC. Удостоверьтесь, что вы даете ему верхнюю часть.
extension UIImage {
func colorArray() -> [UIColor] {
let result = NSMutableArray()
let img = self.CGImage
let width = CGImageGetWidth(img)
let height = CGImageGetHeight(img)
let colorSpace = CGColorSpaceCreateDeviceRGB()
var rawData = [UInt8](count: width * height * 4, repeatedValue: 0)
let bytesPerPixel = 4
let bytesPerRow = bytesPerPixel * width
let bytesPerComponent = 8
let bitmapInfo = CGImageAlphaInfo.PremultipliedLast.rawValue | CGBitmapInfo.ByteOrder32Big.rawValue
let context = CGBitmapContextCreate(&rawData, width, height, bytesPerComponent, bytesPerRow, colorSpace, bitmapInfo)
CGContextDrawImage(context, CGRectMake(0, 0, CGFloat(width), CGFloat(height)), img);
for x in 0..<width {
for y in 0..<height {
let byteIndex = (bytesPerRow * x) + y * bytesPerPixel
let red = CGFloat(rawData[byteIndex] )/255.0
let green = CGFloat(rawData[byteIndex + 1])/255.0
let blue = CGFloat(rawData[byteIndex + 2])/255.0
let alpha = CGFloat(rawData[byteIndex + 3])/255.0
let color = UIColor(red: red, green: green, blue: blue, alpha: alpha)
result.addObject(color)
}
}
return (result as NSArray) as! [UIColor]
}
}
Обратите внимание, что это работает довольно медленно. Требуется 35 секунд для того, чтобы симулятор мог декодировать 15-мегапиксельное изображение, и это на четырехъядерном процессоре i7.
Большое спасибо за вашу помощь, я действительно ценю это! – EBDOKUM
Это приведет к большому количеству накладных расходов при перераспределении массива. Производительность значительно улучшится, если вы предварительно выделите массив. На самом деле у этого действительно нет причин использовать 'NSMutableArray' вместо собственного Swift' Array' – Alexander
Вот версия Swiftier (Swift 3):
extension UIImage {
var colors: [UIColor]? {
var colors = [UIColor]()
let colorSpace = CGColorSpaceCreateDeviceRGB()
guard let cgImage = cgImage else {
return nil
}
let width = Int(size.width)
let height = Int(size.height)
var rawData = [UInt8](repeating: 0, count: width * height * 4)
let bytesPerPixel = 4
let bytesPerRow = bytesPerPixel * width
let bytesPerComponent = 8
let bitmapInfo = CGImageAlphaInfo.premultipliedLast.rawValue | CGBitmapInfo.byteOrder32Big.rawValue
let context = CGContext(data: &rawData,
width: width,
height: height,
bitsPerComponent: bytesPerComponent,
bytesPerRow: bytesPerRow,
space: colorSpace,
bitmapInfo: bitmapInfo)
let drawingRect = CGRect(origin: .zero, size: CGSize(width: width, height: height))
context?.draw(cgImage, in: drawingRect)
for x in 0..<width {
for y in 0..<height {
let byteIndex = (bytesPerRow * x) + y * bytesPerPixel
let red = CGFloat(rawData[byteIndex])/255.0
let green = CGFloat(rawData[byteIndex + 1])/255.0
let blue = CGFloat(rawData[byteIndex + 2])/255.0
let alpha = CGFloat(rawData[byteIndex + 3])/255.0
let color = UIColor(red: red, green: green, blue: blue, alpha: alpha)
colors.append(color)
}
}
return colors
}
}
- 1. Создание цветов с помощью UIColor
- 2. UIImage от UIColor с альфой
- 3. Получение пиксельных цветов из Android TextView
- 4. Convert CGcolorRef to UIColor
- 5. Имеет ли [UIColor colorWithPatternImage:] сохранение UIImage?
- 6. Как получить UIColor от UIImage на iPhone
- 7. UIImage и поиск среднего UIColor пикселей центра
- 8. UIColor pattern с UIImage для отображения сетчатки
- 9. iPhone SDK Инверсия цветов UIImage
- 10. iOS Массив ошибки получения цветов
- 11. UIimage to char * conversion
- 12. UIColor to Hexadecimal (веб-цвет)
- 13. Массив словарей для String для UIColor
- 14. Создайте массив UIColor в swift
- 15. Массив UIColor подстрочный индекс выпуска
- 16. использовать холст и javascript для чтения пиксельных цветов изображения
- 17. BufferedImage to 2D Array: Поиск пиксельных краев
- 18. Почему изображение растягивается (UIImage to CIImage to UIImage)
- 19. border to UIIMage
- 20. PHAsset to UIImage
- 21. NSString to UIImage
- 22. UIBezierPath to UIImage
- 23. cast SKSpriteNode to UIImage
- 24. Convert NSData To UIImage
- 25. NSData/UIImage to String
- 26. UIImage to PHAsset
- 27. CCLayer to UIImage - сглаживание?
- 28. Показать квадрат с желаемым UIColor
- 29. Как разместить `UIColor` на` UIImage` в определенной (X, Y) позиции?
- 30. превратить массив шестнадцатеричных цветов в массив RGB цветов
Что вы имеете в виду под "UIColor массив"? Массив, содержащий цвет каждого пикселя? –
@CodeDifferent точно – EBDOKUM
@CodeDifferent Знаете ли вы, как это сделать или просто интересно? – EBDOKUM