Изменить цвет 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();
захватить изображение перед закрытием контекста изображения. Вы можете попробовать это.