Эффект сепии в IOS - PullRequest
       24

Эффект сепии в IOS

0 голосов
/ 19 апреля 2019

Я разрабатываю приложение для Android, которое должно применить эффект сепии к загруженному изображению. Заявка уже есть. Я наткнулся на функцию в быстром коде, которая применяет эффект сепии.

func applySepia() -> UIImage?  {
        filterValue = 1
        let image = self.processPixels(filterValue: filterValue)

        guard let cgimg = image?.cgImage else {
            print("imageView doesn't have an image!")
            return self
        }

        let value = -filterValue

        print("sliderValue = \(filterValue)")
        print("value = \(value)")

        let openGLContext = EAGLContext(api: .openGLES2)
        let context = CIContext(eaglContext: openGLContext!)

        let coreImage = CIImage(cgImage: cgimg)

        let filter = CIFilter(name: "CISepiaTone")
        filter?.setValue(coreImage, forKey: kCIInputImageKey)
        filter?.setValue(value, forKey: kCIInputIntensityKey)

        if let output = filter?.value(forKey: kCIOutputImageKey) as? CIImage {
            let cgimgresult = context.createCGImage(output, from: output.extent)
            let image = UIImage(cgImage: cgimgresult!)
            return image.applySharpness(filterValue:filterValue)
        }

        return self
    }

Выше функция использует фильтр "CISepiaTone" для реализации тона сепии. Здесь «kCIInputIntensityKey» передается как -1, что я не могу понять. Согласно документации, его значение колеблется от 0 до 1, но как оно допускает отрицательное значение. Из-за этого значения интенсивности сгенерированное изображение выглядит так:

enter image description here

На мой взгляд, после применения сепии это должно выглядеть так: enter image description here

Я могу получить второе изображение в Android (это действительно Sepia Tone), используя https://github.com/StevenRudenko/ColorMartix/blob/master/src/com/sample/colormatrix/Main.java

Однако я не смог найти ни одного встроенного метода или класса в Android, который можно было бы использовать для реализации Sepia Tone с отрицательной интенсивностью так же, как он применяется в IOS swift. Вот мои вопросы:

  1. Как IOS допускает отрицательное значение для kCIInputIntensityKey, несмотря на тот факт, что он должен быть в диапазоне 0-1.
  2. После отрицательных значений интенсивности сгенерированные изображения не выглядят Тон сепии.
  3. Как мне добиться того же эффекта в Android?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...