Конвертировать UIImage в 4-битное цветовое пространство - PullRequest
0 голосов
/ 16 октября 2018

Я хочу сделать свое изображение как можно меньше (с точки зрения размера данных, без изменения высоты или ширины), и я могу сделать это за счет цветов.Поэтому я хочу иметь 4-битную цветовую схему.Как я могу преобразовать изображение в эту цветовую схему?Как я могу создать это?Я начинаю с попытки преобразования в оттенки серого с помощью этого кода:

func convert(image: UIImage) -> UIImage? {
    let imageSize = image.size
    let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceGray()
    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.none.rawValue)
    let context = CGContext(data: nil, width: Int(imageSize.width), height: Int(imageSize.height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)!
    context.draw(image.cgImage!, in: CGRect(origin: CGPoint.zero, size: imageSize))
    //image.draw(in: )
    let imgRef = context.makeImage()
    return UIImage(cgImage: imgRef!)
}

, и он работает.Теперь я хочу изменить его, чтобы использовать другое цветовое пространство.Я обнаружил, что то, что я ищу, это, вероятно, индексированная цветовая схема, верно?Но я не могу найти никакого полезного учебника, как я могу это сделать.Я начал так:

    let table: [UInt8] = [0,0,0, 255,0,0, 0,0,255, 0,255,0,
                          255,255,0, 255,0,255, 0,255,255, 255,255,255]
    let colorSpace = CGColorSpace(indexedBaseSpace: CGColorSpaceCreateDeviceRGB(),
                                  last: table.count - 1, colorTable: table)!

Но я не уверен, нормально ли я начал и должен ли я продолжать.Какие значения я должен затем использовать в методе инициализации CGContext и так далее.Может кто-нибудь мне поможет?Спасибо

...