Как получить обрантую от картинки в objective c?

Здравствуйте! Необходимо получить обратное изображение из существующей картинки
есть такое изображение
ecf1636cc5fd4c07a47624958e4af43a.jpg
здесь белое считается изображением на calayer
нужно получить такое
451774623f3a4233ab48e814606f65cb.jpg
помогите решить вопрос, заранее Спасибо!
  • Вопрос задан
  • 2880 просмотров
Пригласить эксперта
Ответы на вопрос 2
Flanker_4
@Flanker_4
Получить изображение по маске можно с помощью CoreGraphics
Пример можно посмотреть тут. Если Вам не нужно изображение, а нужно всего лишь этот трюк провернуть в ui, то посмотрите на QuartzCore (гуглить по тегам mask CALayer)
Теперь что касается маски... Я не совсем понял насколько она у Вас может быть вариантивноq, но если это квадрат, то его можно просто отрисовать через coreGraphics (создаете контекст и через CGContextAddRect рисуете нужную Вам маску)
Или же, если она у Вас нарисована в calayer, отрендерить в ту же картинку как приведено тут

Еще есть вариант с CoreImage и фильтром CIBlendWithAlphaMask , ну тут опять же, Вам нужно будет создать маску
CoreImage теоретичеки будет работать быстрее... .
Я к сожалению плохо знаком со сторонними библиотеками по компьютерной графике, но рекомендую Вам покопаться в чем-то аля OpenCV
Ответ написан
donik102
@donik102 Автор вопроса
- (UIImage*)convertToInverseWhiteMask: (UIImage *) image {
    UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
    CGRect imageRect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // Draw a white background (for white mask)
    CGContextSetRGBFillColor(ctx, 0.0f, 0.0f, 0.0f, 0.75f);
    CGContextFillRect(ctx, imageRect);
    
    
    // Apply the source image's alpha
    [image drawInRect:imageRect blendMode:kCGBlendModeDestinationOut alpha:1.0f];
    CGContextScaleCTM(ctx, 1.0, -1.0);
    UIImage* mask = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return mask;
}

Решение. Отдаем картинку, получаем обратную.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы