Изменить цвет UIImage с помощью маскировки и замены этого изображения на цветное изображение

В одном классе у меня есть массив, состоящий из пяти UIImages, таких как tiangle.png и circle.png.

В текущем классе у меня есть список цветов. После нажатия на UIImage и после нажатия на один цвет можно изменить цвет текущего UIImage. Это будет реализовано путем маскировки изображения, установки его цвета и замены старого изображения UIImage новым в выбранном цвете.

Но что-то не так в методе, который должен изменить цвет:

- (void) changeColor: (UITapGestureRecognizer*) gestureRecognizer{

    UIGraphicsBeginImageContext(test.newView.image.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGPoint loc = [gestureRecognizer locationInView:self.view];
    CGContextSetFillColorWithColor(context, [[self colorOfPoint:loc]CGColor]);
    CGContextTranslateCTM(context, 0, test.newView.image.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGRect rect = CGRectMake(test.newView.frame.origin.x,test.newView.frame.origin.x,   test.newView.image.size.width,test.newView.image.size.height);
    CGContextSetBlendMode(context, kCGBlendModeColorBurn);

    CGContextClipToMask(context, rect, test.newView.image.CGImage);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context, kCGPathFill);

    CGImageRef imgRef = CGBitmapContextCreateImage(context);
    UIImage* img = [UIImage imageWithCGImage:imgRef];
    CGImageRelease(imgRef);
    CGContextRelease(context);
    UIGraphicsEndImageContext();
    test.newView.image = img;

}

Единственное, что происходит, это то, что нажатый UIImage станет непрозрачным.
В этом случае изображение, содержащее UIImage, не удаляется.

1 ответ

Решение

Я не уверен, что захват imageRef с помощью вызова CGBitmapContextCreateImage() уместен в контексте изображения UIGraphics. Каждый пример, который я когда-либо видел, использует

  UIImage* image = UIGraphicsGetImageFromCurrentImageContext();

захватить изображение перед закрытием контекста изображения. Вы можете попробовать это.

Другие вопросы по тегам