博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIImage图片处理
阅读量:5090 次
发布时间:2019-06-13

本文共 2502 字,大约阅读时间需要 8 分钟。

#pragma mark -#pragma mark - 缩放处理+ (UIImage *)scaleImage:(UIImage *)image withScale:(float)scale{    UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scale, image.size.height * scale));        [image drawInRect:CGRectMake(0, 0, image.size.width * scale, image.size.height * scale)]; UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return scaledImage; } + (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)size { UIGraphicsBeginImageContext(CGSizeMake(size.width, size.height)); [image drawInRect:CGRectMake(0, 0, size.width, size.height)]; UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return scaledImage; } #pragma mark - #pragma mark - 马赛克处理 static CGContextRef CreateRGBABitmapContext (CGImageRef inImage) { CGContextRef context = NULL; CGColorSpaceRef colorSpace; void *bitmapData; //内存空间的指针,该内存空间的大小等于图像使用RGB通道所占用的字节数。 int bitmapByteCount; int bitmapBytesPerRow; size_t pixelsWide = CGImageGetWidth(inImage); //获取横向的像素点的个数 size_t pixelsHigh = CGImageGetHeight(inImage); bitmapBytesPerRow = (pixelsWide * 4); //每一行的像素点占用的字节数,每个像素点的ARGB四个通道各占8个bit(0-255)的空间 bitmapByteCount = (bitmapBytesPerRow * pixelsHigh); //计算整张图占用的字节数 colorSpace = CGColorSpaceCreateDeviceRGB();//创建依赖于设备的RGB通道 //分配足够容纳图片字节数的内存空间 bitmapData = malloc( bitmapByteCount ); //创建CoreGraphic的图形上下文,该上下文描述了bitmaData指向的内存空间需要绘制的图像的一些绘制参数 context = CGBitmapContextCreate (bitmapData, pixelsWide, pixelsHigh, 8, bitmapBytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast); //Core Foundation中通过含有Create、Alloc的方法名字创建的指针,需要使用CFRelease()函数释放 CGColorSpaceRelease( colorSpace ); return context; } static unsigned char *RequestImagePixelData(UIImage *inImage) { CGImageRef img = [inImage CGImage]; CGSize size = [inImage size]; //使用上面的函数创建上下文 CGContextRef cgctx = CreateRGBABitmapContext(img); CGRect rect = { { 0,0},{size.width, size.height}}; //将目标图像绘制到指定的上下文,实际为上下文内的bitmapData。 CGContextDrawImage(cgctx, rect, img); unsigned char *data = CGBitmapContextGetData (cgctx); //释放上面的函数创建的上下文 CGContextRelease(cgctx); return data; } + (UIImage *)mosaicImage:(UIImage *)image withLevel:(int)level { unsigned char *imgPixel = RequestImagePixelData(image); CGImageRef inImageRef = [image CGImage]; GLuint width = CGImageGetWidth(inImageRef); GLuint height = CGImageGetHeight(inImageRef); unsigned char prev[4] = { 0}; int bytewidth = width*4; int i,j; int val = level; for(i=0;i

转载于:https://www.cnblogs.com/Free-Thinker/p/4947501.html

你可能感兴趣的文章
NPN,PNP接线总结
查看>>
给乱序的链表排序 · Sort List, 链表重排reorder list LoLn...
查看>>
一个数组中同时找到最大/最小值
查看>>
python终端下打印颜色
查看>>
《从Paxos到ZooKeeper 分布式一致性原理与实践》阅读【Leader选举】
查看>>
RPC框架基础概念理解以及使用初体验
查看>>
TF-IDF 学习
查看>>
NIOS II与存储类外设连接时的问题
查看>>
java设计模式-----组合模式
查看>>
AS3页游架构分析
查看>>
Visual Studio 代码风格约束
查看>>
Jzoj3170 挑选玩具
查看>>
测试随想
查看>>
JavaWeb_客户端相对/绝对路径和服务器端路径
查看>>
数组中方法some,every , reduce简单方法
查看>>
Android中的onActivityResult和setResult方法的使用
查看>>
使用DD_belatedPNG让IE6支持PNG透明图片
查看>>
Redis-列表类型命令操作笔记
查看>>
ngx-echarts响应式图表
查看>>
用Maven部署war包到远程Tomcat服务器
查看>>