1

我想用以下代码屏蔽图像:

CGFloat plx = inputImage.size.width/_imageView.frame.size.width;
CGFloat ply = inputImage.size.height/_imageView.frame.size.height;

CGFloat radius = MIN(_postionView.frame.size.width * plx, _postionView.frame.size.height * ply)/1.5;

CIVector *cen = [CIVector vectorWithX:_postionView.center.x * plx Y:_postionView.center.y * ply];

CIFilter *radialGradient = [CIFilter filterWithName:@"CIRadialGradient" keysAndValues:
                            @"inputRadius0", [NSNumber numberWithFloat:radius],
                            @"inputRadius1", [NSNumber numberWithFloat:radius + 1.0f],
                            @"inputColor0", [CIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0],
                            @"inputColor1", [CIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0],
                            @"inputCenter", cen,
                            nil];

CIImage *circleImage = [radialGradient valueForKey:kCIOutputImageKey];

_postionView 是我的 uiimageview。它没有得到正确的位置。我猜这是因为uikit坐标系和quartz坐标系不同。有任何想法吗?

4

1 回答 1

0

已解决,以下是解决代码:</p>

CGPoint touchPoint = [touch locationInView:self.view];
ScaleX = _imageView.image.size.width/self.view.frame.size.width;
ScaleY = _imageView.image.size.height/self.view.frame.size.height;

CGFloat imgX;
CGFloat imgY;

imgX = touchPoint.x * ScaleX;
imgY = _imageView.image.size.height - touchPoint.y * ScaleY;

VICPoint = CGPointMake(imgX, imgY);

CIImage *maskImage = nil;
CIVector *cen;

cen = [CIVector vectorWithX:VICPoint.x Y:VICPoint.y];
CGFloat radius = MIN(80 * ScaleX, 80 * ScaleY)/1.5;

CIFilter *radialGradient = [CIFilter filterWithName:@"CIRadialGradient" keysAndValues:
                            @"inputRadius0", [NSNumber numberWithFloat:radius],
                            @"inputRadius1", [NSNumber numberWithFloat:radius + 1.0f],
                            @"inputColor0", [CIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0],
                            @"inputColor1", [CIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0],
                            @"inputCenter", cen,
                            nil];

CIImage *circleImage = [radialGradient valueForKey:kCIOutputImageKey];
于 2012-11-10T07:22:50.147 回答