image处理相关

来源:互联网 发布:windows中菜单有3类 编辑:程序博客网 时间:2024/06/15 06:15

image做遮罩mask

原理性的东西请参考Quartz 2D Programming Guide - Bitmap Images and Image Masks,也可以参考iOS绘图教程

请参考:

  • How to Mask an Image
  • Mask and crop an image
  • 【iPhone App開發】How to clip a UIImage?

这里写图片描述

实现方式是:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {    CGImageRef maskRef = maskImage.CGImage;     CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),        CGImageGetHeight(maskRef),        CGImageGetBitsPerComponent(maskRef),        CGImageGetBitsPerPixel(maskRef),        CGImageGetBytesPerRow(maskRef),        CGImageGetDataProvider(maskRef), NULL, false);    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);    return [UIImage imageWithCGImage:masked];}

另一种方式会使用到

CGContextClipToMask(context, self.bounds, mask);

例如iOS Programming Recipe 24: Creating a Mask for Clipping Drawings例子中,利用mask来实现一个渐变的圆圈

-(void)drawEllipseWithGradient:(CGContextRef)context{    CGContextSaveGState(context);    //UIGraphicsBeginImageContextWith(self.frame.size);    UIGraphicsBeginImageContextWithOptions((self.frame.size), NO, 0.0);    CGContextRef newContext = UIGraphicsGetCurrentContext();      //Set color of current context   [[UIColor blackColor] set];   //Draw ellipse <- I know we’re drawing a circle, but a circle is just a special ellipse.   CGRect ellipseRect = CGRectMake(110.0f, 200.0f, 100.0f, 100.0f);   CGContextFillEllipseInRect(newContext, ellipseRect);    CGImageRef mask = CGBitmapContextCreateImage(UIGraphicsGetCurrentContext());   UIGraphicsEndImageContext();    CGContextClipToMask(context, self.bounds, mask);    [self drawGradient:context];    CGImageRelease(mask);    CGContextRestoreGState(context);}

这里写图片描述

CoreGraphic 遮色片應用中的例子也一样

这里写图片描述这里写图片描述

UIImage *iconImage = [UIImage imageNamed:@"logo.png"];UIImage *maskImage = [UIImage imageNamed:@"mask.png"];UIGraphicsBeginImageContext(iconImage.size);//設定參考範圍CGContextRef context = UIGraphicsGetCurrentContext();CGContextScaleCTM(context, 1, -1);CGRect region = CGRectMake(0, 0, iconImage.size.width, iconImage.size.height);CGContextTranslateCTM(context, 0, -region.size.height);//將context做遮罩範圍的切割再drawCGContextClipToMask(context, region, maskImage.CGImage);CGContextDrawImage(context, region, iconImage.CGImage);//將影像指定給imageViewimageView.image = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();
0 0