文章标题

来源:互联网 发布:不教翠羽遇萧峰 知乎 编辑:程序博客网 时间:2024/04/29 01:35

用到的函数

创建颜色空间(有两种颜色空间:彩色空间,灰色空间)
colorSpaceRef CGColorSpaceCreateDeviceRGB();
像素数组指针首地址

UInt32 *inputPixels = (UInt32*)calloc(图片大小,每个像素点的大小);例如:UInt32 *inputPixels = (UInt32*)calloc(width *height ,sizeOf(UInt32));inputPixels 是像素指针
CGContextRef CGBitMapContextCreatevoid* datasize_t width,size_t height,size_t bitsPerComponents,size_t bitsPerRow,CGColorSpaceRef colorSpace,CGBitsmapInfo bitMapInfo,);data:指要渲染的内存地址width :bitMap 的宽度height :bitMap 的高度bitsPerComponents :内存中每个像素组件的位数 ,例如RGBA 中每个组件的位数为8bitsPerRow 每一行在内存中所占的bitcolorspace 颜色空间bitMapInfo 布局摆放,是否有透明度
CGContextDrawImage(参数一:图形上下文,CGContextRef参数二:图形绘制的区域,CGRectMake()参数三:CGImage)

美白效果的实现过程:

1.获取图片的大小(图片width,height)
目的:开辟内存空间
2.创建颜色空间(两种:灰色空间,彩色空间)
CGColorSapceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
3.创建图形上下文(作用:保存图片信息)

先生成像素数组指针首地址:

UInt32 *inputPixels = (UInt 32*)calloc(width*height,sizeOf(UInt32));

然后创建图形上下文

CGContextRef contextRef = CGBitMapContextCreate(inputPixels,width,height,8,width * 4,colorSpaceRef,kCGImageAlphaPremultipiedLast |kCGBitmapBytesOrder32Big);

4.根据图形上下文绘制图片
参数一:图形上下文信息,
参数二:绘制图片大小区域(内存区域多大,就绘制多大)
参数三:图片

CGContextDrawImage(contextRef,CGRectMake(0,0,width,height),imageRef);

5.开始美白

三原色:RGB大小为0~255 , 0 为黑色,255为纯白,
美白原理:操作像素点,将RGB值调大,图片就会变白,从而达到美白效果

通过for 循环,便利每个像素点,然后将其变大

**for(int i = 0; i < height; i++){****for (int j = 0; j< width; j++){**取到当前像素点的指针UInt32 *currentPixels = intputPixels + (i *width) +j;UInt32 color = *currentPixels;操作像素点改变RGB的值......(后面的算法省略}}

6.创建UIImage

CGImageRef  cgImage= CGBitMapContextCreatImage(contextRef);UIImage *image = [UIImage imageWithCGImage:cgImage];CGContextRelease(contextRef);CGContextRelease(colorSpaceRef);CGContextRelease(cgImage);free(inputPixels);

openCV 框架:讲解图形学+ 图像处理技术

0 0
原创粉丝点击