Как стереть часть изображения UIImageView на iOS?

У меня есть представление с UIImageView и установленным для него изображением. Я хочу стереть изображение, как мы это делаем в фотошопе с помощью ластика. Как мне этого добиться? Кроме того, как отменить стирание?


person Rahul Vyas    schedule 28.09.2009    source источник


Ответы (2)


Если вы знаете, какую область вы хотите стереть, вы можете создать новое изображение того же размера, установить маску на полное изображение за вычетом области, которую вы хотите стереть, нарисовать полное изображение в новом изображении и использовать его в качестве основы. новое изображение. Чтобы отменить, просто используйте предыдущее изображение.

Изменить

Образец кода. Скажем, область, которую вы хотите удалить из представления изображения imgView, указана с помощью erasePath:

- (void) clipImage 
{
    UIImage *img = imgView.image;
    CGSize s = img.size;
    UIGraphicsBeginImageContext(s);
    CGContextRef g = UIGraphicsGetCurrentContext();
    CGContextAddPath(g,erasePath);
    CGContextAddRect(g,CGRectMake(0,0,s.width,s.height));
    CGContextEOClip(g);
    [img drawAtPoint:CGPointZero];
    imageView.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}
person Ed Marty    schedule 28.09.2009
comment
Спасибо за пример кода, но в CGContextAddPath(g,erasePath); Как получить путь стирания? Пожалуйста помогите. - person Dhaval Panchal; 16.01.2012
comment
Привет, @RahulVyas, @Dhaval, @Ed Marty, не могли бы вы рассказать мне, как вы получаете ErasePath, если у вас есть .. - person jillu_; 30.08.2012
comment
Вот как получить erasePath. Просто передайте выбранный CGRect, который вы хотите обрезать, как cropRect - CGMutablePathRef erasePath = CGPathCreateMutable(); CGPathAddRect(erasePath, NULL, cropRect); CGContextAddPath(г,путь стирания); - person Sean; 08.12.2013

Версия Swift 5.2

        UIGraphicsBeginImageContextWithOptions(imageView.frame.size, false, 1.0)
        let currentContext = UIGraphicsGetCurrentContext()
        currentContext?.addPath(shapeLayer.path!)
        currentContext?.addRect(CGRect(x: 0, y: 0, width: imageView.frame.size.width, height: imageView.frame.size.height))
        currentContext?.clip(using: .evenOdd)
        
        imageView.image?.draw(at: .zero)
        
        let imageTeemp = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext()
person Prashant Tukadiya    schedule 05.02.2021