2012-10-24 75 views
1

我想掩盖的图像像这样的代码:如何使用uiimageview rect遮罩图像?

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坐标系和石英不同的坐标系。有任何想法吗?

回答

0

已经解决了,下面是解决代码:

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];