月圆之夜,紫禁之巅,一剑西来,天外飞仙。

0%

iOS学习笔记--图片灰度处理

本文实现将一张彩色图片转换为灰色图片。


方法一:通过自定义方法实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
+(UIImage*)systemImageToGray:(UIImage*)image
{
int width = image.size.width;
int height = image.size.height;

//第一步:开辟颜色空间
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceGray();

//第二步:创建颜色空间的上下文
CGContextRef contextRef = CGBitmapContextCreate(nil, width, height, 8, 0,colorSpaceRef, kCGImageAlphaNone);

if (contextRef == nil)
{
return nil;
}
//第三步:渲染图片
CGContextDrawImage(contextRef, CGRectMake(0, 0, width, height), image.CGImage);

//第四步:创建图片 将绘制的颜色空间转成CGImage
CGImageRef grayImageRef = CGBitmapContextCreateImage(contextRef);

//第五步:将C/C++图片转成UIImage

UIImage * newImage = [UIImage imageWithCGImage:grayImageRef];

//释放内存
CGColorSpaceRelease(colorSpaceRef);
CGContextRelease(contextRef);
CGImageRelease(grayImageRef);

return newImage;

}

方法二:通过openCV框架实现。

1
2
#import <opencv2/opencv.hpp>
#import <opencv2/imgcodecs/ios.h>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
+(UIImage*)imageToGray:(UIImage *)image
{
//第一步:将ios平台下的图片-->openCV图片

Mat mat_image_color;

UIImageToMat(image, mat_image_color);

//第二步:将openCV的图片进行灰度处理
Mat mat_image_gray;
//参数三:转换类型
cvtColor(mat_image_color, mat_image_gray, COLOR_RGB2GRAY);

//第三步:将灰色图片转成可现实图片
cvtColor(mat_image_gray, mat_image_color, COLOR_GRAY2RGB);

//第四步:将openCV的图片转成ios图片

UIImage * newImage = MatToUIImage(mat_image_color);

return newImage;

}

如有错误请见谅!