博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片 转黑白
阅读量:6514 次
发布时间:2019-06-24

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

-(UIImage*) convertToGreyscale:(UIImage*)i {
int kRed =1;int kGreen =2;int kBlue =4;int colors = kGreen;int m_width = i.size.width;int m_height = i.size.height;uint32_t*rgbImage =(uint32_t*) malloc(m_width * m_height *sizeof(uint32_t));CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();CGContextRef context =CGBitmapContextCreate(rgbImage, m_width, m_height,8, m_width *4, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);CGContextSetInterpolationQuality(context, kCGInterpolationHigh);CGContextSetShouldAntialias(context, NO);CGContextDrawImage(context,CGRectMake(0,0, m_width, m_height),[i CGImage]);CGContextRelease(context);CGColorSpaceRelease(colorSpace);// now convert to grayscaleuint8_t*m_imageData =(uint8_t*) malloc(m_width * m_height);for(int y =0; y < m_height; y++){
for(int x =0; x < m_width; x++){
uint32_t rgbPixel=rgbImage[y*m_width+x];uint32_t sum=0,count=0;if(colors & kRed){
sum +=(rgbPixel>>24)&255; count++;}if(colors & kGreen){
sum +=(rgbPixel>>16)&255; count++;}if(colors & kBlue){
sum +=(rgbPixel>>8)&255; count++;} m_imageData[y*m_width+x]=sum/count;}} free(rgbImage);// convert from a gray scale image back into a UIImageuint8_t*result =(uint8_t*) calloc(m_width * m_height *sizeof(uint32_t),1);// process the image back to rgbfor(int i =0; i < m_height * m_width; i++){
result[i*4]=0;int val=m_imageData[i]; result[i*4+1]=val; result[i*4+2]=val; result[i*4+3]=val;}// create a UIImage colorSpace =CGColorSpaceCreateDeviceRGB(); context =CGBitmapContextCreate(result, m_width, m_height,8, m_width *sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);CGImageRef image =CGBitmapContextCreateImage(context);CGContextRelease(context);CGColorSpaceRelease(colorSpace);UIImage*resultUIImage =[UIImage imageWithCGImage:image];CGImageRelease(image); free(m_imageData);// make sure the data will be released by giving it to an autoreleased NSData[NSData dataWithBytesNoCopy:result length:m_width * m_height];return resultUIImage;}

转载于:https://www.cnblogs.com/gaoxiao228/p/3298441.html

你可能感兴趣的文章
《Netkiller Blockchain 手札》Hyperledger Fabric Java SDK Demo
查看>>
Linux系统_Centos7下安装Nginx
查看>>
《PHP和MySQL Web 开发》 第12章 MySQL高级管理
查看>>
数据库设计 Step by Step (6) —— 提取业务规则
查看>>
Redis客户端redisson实战
查看>>
连接到 JasperReports Server
查看>>
java处理高并发高负载类网站问题
查看>>
使用C#生成随机密码(纯数字或字母)和随机卡号(数字与字母组合)
查看>>
CAS服务器端集群
查看>>
JAVA Collections框架
查看>>
进制转换
查看>>
ASCII码
查看>>
java常用四种排序源代码
查看>>
win7 下硬盘安装Redhat7
查看>>
Redis 分布式锁的正确实现方式
查看>>
mysqldump 备份命令使用中的一些经验总结
查看>>
程序猿知道英语词汇
查看>>
数据存储(两)--SAX发动机XML记忆(附Demo)
查看>>
谈谈SQL 语句的优化技术
查看>>
ecshop如何判断缓存文件是否能更新
查看>>