измените альфа-канал UIImage, затем используйте его как colorWithPatternImage

У меня есть приложение для рисования, в котором я использую уже существующие изображения .png для рисования определенных текстурированных цветов в UIImageView.

//основные элементы рисования

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
   ctr = 0;
    pts[0] = [touch locationInView:self.tempImage];

    lastPoint = [touch locationInView:tempImage];
    }


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
  UITouch *touch = [touches anyObject];
            CGPoint p = [touch locationInView:self.tempImage];
    currentPoint = [touch locationInView:tempImage];
    ctr++;
    pts[ctr] = p;

    if (ctr == 4)

    {
        pts[3] = CGPointMake((pts[2].x + pts[4].x)/2.0, (pts[2].y + pts[4].y)/2.0); // move the endpoint to the middle of the line joining the second control point of the first Bezier segment and the first control point of the second Bezier segment

        [path moveToPoint:pts[0]];
        [path addCurveToPoint:pts[3] controlPoint1:pts[1] controlPoint2:pts[2]]; // add a cubic Bezier from pt[0] to pt[3], with control points pt[1] and pt[2]

    [self draw2];
 pts[1] = pts[4];
        ctr = 1;
           }
            lastPoint = currentPoint;
    }

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
    [path removeAllPoints];
           ctr = 0;
           UIGraphicsBeginImageContext(self.tempImage.frame.size);
     [self.imagesView.image drawInRect:CGRectMake(0,0, self.imagesView.frame.size.width, self.imagesView.frame.size.height) blendMode:kCGBlendModeNormal alpha:1.0];
    [self.tempImage.image drawInRect:CGRectMake(0,0, self.tempImage.frame.size.width, self.tempImage.frame.size.height) blendMode:kCGBlendModeNormal alpha:a];
     self.imagesView.image = UIGraphicsGetImageFromCurrentImageContext();
           self.tempImage.image = nil;
           UIGraphicsEndImageContext();
  }


- (void)draw2
{
UIGraphicsBeginImageContext(self.tempImage.frame.size);
        [self.tempImage.image drawInRect:CGRectMake(0, 0, self.tempImage.frame.size.width, self.tempImage.frame.size.height)];
 if ([pencilString isEqualToString:@"red"]) {

//Я назначаю существующий .png (RedTextureImage.png) для colorWithPatternImage и рисую с его помощью

brushImage = [UIImage imageNamed:@"RedTextureImage.png];

                [[UIColor colorWithPatternImage:brushImage]setStroke];
            }
 CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeNormal);
            [path stroke];

        }

//и это устанавливает его альфу

 self.tempImage setAlpha:a];
 UIGraphicsEndImageContext();
 }

поэтому я могу нарисовать штрих или линию через tempView, когда touchesMoved

а затем сохраните его в imagesView on touchesEnd в любой альфе, которую я выберу.

ПРОБЛЕМА

Что я хочу сделать, так это взять imagesView.image и сохранить его как изображение png и загрузить его в colorWithPatternImage, изменяя его альфу по желанию. Таким образом, я могу провести более прозрачную линию поперек исходного рисунка, а затем изменить альфу и получить другую линию с другой прозрачностью.

Как сохранить UIImageView.image как изображение .png, которое будет использоваться для colorPatternImage?

У меня есть изображение для иллюстрации, но я не вижу, как его загрузить.


person user1114881    schedule 28.04.2015    source источник


Ответы (1)


Итак, я понял это:

В TouchesBegan я сделал brushImage = self.imagesView.image;

Затем в TouchesMoved я использовал код, чтобы стереть обводку формы imagesView и (draw2) перерисовать ее, используя colorWithPatternColor brushImage, но вместо blendModeNormal я использовал blendModeCopy.

И я работаю так, как хочу.

person user1114881    schedule 28.04.2015