Как рассчитать цветовую композицию в Swift? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать инструмент ластик для моего приложения для редактирования фотографий, как в Photoshop (или который может удалить определенный цвет из изображения), например, пользователь будет рисовать линии с нужным цветом на изображении, а мойФункция обработает изображение после того, как прикосновение закончится немедленно.

Я создал метод, и он хорошо работает с некоторыми цветами, такими как белый, черный, желтый и т. д., но когда я выбираю цвет с 0,5 альфа, он не работает должным образом!Я думаю, что мой составной расчет неверен, поэтому кто-то может помочь мне с этим, пожалуйста?

А вот мой метод расчета:

extension UIImage {

func getImageRemovedDefinedColor(choosedColor: UIColor) -> UIImage? {

    let image = UIImage(data: self.jpegData(compressionQuality: 1.0)!)!
    let rawImageRef: CGImage = image.cgImage!

    let components = choosedColor.cgColor.components!

    var colorMasking: [CGFloat] = []
    var red: CGFloat = 0.0, green: CGFloat = 0.0, blue: CGFloat = 0.0, alpha: CGFloat = 0.0

    if choosedColor.isEqual(UIColor.white) {

        colorMasking = [222, 255, 222, 255, 222, 255]

    } else if choosedColor.isEqual(UIColor.black) {

        colorMasking = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

    } else {

        if components.count > 3 {

            red = components[0]
            green = components[1]
            blue = components[2]
            alpha = components[3]

            red = red * 255.0
            green = green * 255.0
            blue = blue * 255.0
            alpha = alpha * 255.0

            let redRange: [CGFloat] = {
                return [max(red - (alpha / 2.0), 0.0), min(red + (alpha / 2.0), 255.0)]
            }()

            let greenRange: [CGFloat] = {
                return [max(green - (alpha / 2.0), 0.0), min(green + (alpha / 2.0), 255.0)]
            }()

            let blueRange: [CGFloat] = {
                return [max(blue - (alpha / 2.0), 0.0), min(blue + (alpha / 2.0), 255.0)]
            }()

            colorMasking = [redRange[0], redRange[1], greenRange[0], greenRange[1], blueRange[0], blueRange[1]]
        }
    }

    print(colorMasking)

    UIGraphicsBeginImageContext(image.size);

    let maskedImageRef = rawImageRef.copy(maskingColorComponents: colorMasking)
    UIGraphicsGetCurrentContext()?.translateBy(x: 0.0,y: image.size.height)
    UIGraphicsGetCurrentContext()?.scaleBy(x: 1.0, y: -1.0)
    UIGraphicsGetCurrentContext()?.draw(maskedImageRef!, in: CGRect.init(x: 0, y: 0, width: image.size.width, height: image.size.height))
    let result = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return result

}

Примечание: Может быть, мойЭто совершенно неправильно, если у вас есть другая идея о том, «как мы можем создать инструмент ластик с помощью Swift», пожалуйста, поделитесь им.

Все идеи приемлемы, заранее спасибо.

...