高斯模糊-虚化的实现方式
来源:互联网 发布:js 冒号语法 编辑:程序博客网 时间:2024/06/05 15:13
1.高斯模糊
3
4
5
6
7
8
9
10
11
12
CIContext *context = [CIContext contextWithOptions:nil];
CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@
"1.png"
]];
// create gaussian blur filter
CIFilter *filter = [CIFilter filterWithName:@
"CIGaussianBlur"
];
[filter setValue:inputImage forKey:kCIInputImageKey];
[filter setValue:[NSNumber numberWithFloat:
10.0
] forKey:@
"inputRadius"
];
// blur image
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];
UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
self.mainImageView.image = image;
2.
Bitmap image and image mask
About Bitmap Images and Image Masks
bitmap image是一系列的像素,这些像素中的每一个代表了图片中的一个点。bitmap image可以是JPEG TIFF PNG,GIF,ICO,GMP,CUR等格式。
image mask是一个用于表征哪个部分需要画出。image mask就像是用于表征色彩放在页面的哪一部分(where to place color on the page.)
Creating Images
创建CGImageRef类型的对象的函数有很多:
1、CGImageCreate:
2、CGImageSourceCreateImageAtIndex:与CGImageSourceCreateWithURL连用
3、CGImageSourceCreateThumbnilAtIndex:与上同
4、CGBitmapContextCreateImage:获取被画在context中的图形,构成一个图片
5、CGImageCreateWithImageInRect:截取小图片(规则截取)
Masking Images
mask技术通过控制另一个图片的那一部分被显示,产生出有意思的效果。
mask的方法有一下几种:
1、通过image mask
2、通过image
3、通过context
4、通过color
Masking an Image with an Image Mask
前提要求:
作为mask的图片,颜色的组成为黑白两色的。黑色部分最终体现为被mask图片的显示的部分,白色部分不显示。两个图片最好都是png格式的。
步骤:
1、创建image mask
通过函数CGImageMaskCreate创建一个CGImageRef的数据mask
2、通过上一步创建的mask,与另一张图片(source)结合创建一个新的图片masked
通过函数CGImageCreateWithMask,参数为上述两个CGImageRef的图片,返回值为masked
3、masked既是最终需要的。可以通过CGContextDrawImage画在屏幕上。也可以通过转化为NSData类型的数据data,调用[data writeToFile@"" aumatically:YES]写入一个文件。
注意:如果想让不显示的部分真正的是透明的,需要将context所处的View的opaqe设置为NO,既是把view设置为透明。
如上面三幅图所示:分别为原图片(source),提供mask的图片(mask),结果(masked)。
代码:
-(CGImageRef) CopyImageAndAddAlphaChannel :(CGImageRef) sourceImage
{
CGImageRef retVal = NULL;
size_t width = CGImageGetWidth(sourceImage);
size_t height = CGImageGetHeight(sourceImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef offscreenContext = CGBitmapContextCreate(NULL, width, height,
8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
if (offscreenContext != NULL) {
CGContextDrawImage(offscreenContext, CGRectMake(0, 0, width, height), sourceImage);
retVal = CGBitmapContextCreateImage(offscreenContext);
CGContextRelease(offscreenContext);
}
CGColorSpaceRelease(colorSpace);
return retVal;
}
- (UIImage*)maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
Creating Images
Masking Images
Masking an Image with an Image Mask
如上面三幅图所示:分别为原图片(source),提供mask的图片(mask),结果(masked)。
{
}
- (UIImage*)maskImage:(UIImage *)image withMask:(UIImage *)maskImage {