CGImage Masking перестал работать на iOS 12 - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть метод для маскировки черно-белого изображения, вырезая (т.е. делая прозрачным) любые пиксели, которые выше или ниже определенной яркости.Результатом будет то же самое черно-белое изображение, но с яркостью, превышающей 70% или ниже 25% (или что вы выберете), измененной на прозрачную.

Desired Result

Он отлично работал на iOS 11, но сломался на iOS 12. Теперь он возвращает оригинальное, цельное изображение без изменений каждый раз.

-(UIImage*)imageWithLumaMaskFromDark:(CGFloat)lumaFloor toLight:(CGFloat)lumaCeil {
    // inputs range from 0 - 255
    CGImageRef rawImageRef = self.CGImage;

    const CGFloat colorMasking[6] = {lumaFloor, lumaCeil, lumaFloor, lumaCeil, lumaFloor, lumaCeil};

    UIGraphicsBeginImageContext(self.size);
    CGImageRef maskedImageRef = CGImageCreateWithMaskingColors(rawImageRef, colorMasking);
    {
        //if in iphone
        CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0.0, self.size.height);
        CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0);
    }

    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, self.size.width, self.size.height), maskedImageRef);
    UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
    CGImageRelease(maskedImageRef);
    UIGraphicsEndImageContext();
    return result;
}

Я опытный разработчик iOS, но полный CGImage/ CGContext Noob.Может кто-нибудь помочь мне выяснить, что могло сломаться с этим методом в iOS 12, и что я могу сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 27 февраля 2019

Исходя из этого ответа на связанный вопрос, по-видимому, мне нужно было преобразовать его в несжатый JPG перед попыткой маскировать, чтобы удалить любые альфа-каналы.

То, что изменилось вiOS 12, согласно их Замечаниям к выпуску , «Различные вызовы Core Graphics были защищены от продолжения с неверными параметрами. В iOS 12 эти вызовы теперь могут возвращать ноль или возвращаться раньше».

Таким образом, прозрачность, которая была включена до iOS 12, работала нормально, но с iOS 12 перестала работать.Приведенный выше ответ отлично работает.

...