zoukankan      html  css  js  c++  java
  • 图片 转黑白

    -(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;}
  • 相关阅读:
    .NET 分布式架构开发实战之一
    frame中隐藏横向滚动条
    实时检测网络状态及是否可以连接Internet
    jquery表格插件推荐
    FireFox窗体frameset,iframe间的js调用方法
    用C#实现实现简单的 Ping 的功能,用于测试网络是否已经联通
    一个阴历阳历互相转化的类
    CSS技巧 — 不使用图片实现圆角、阴影、渐变等功能
    Windows下命令行下启动ORACLE服务
    使用C#进行点对点通讯和文件传输(通讯基类部分)
  • 原文地址:https://www.cnblogs.com/gaoxiao228/p/3298441.html
Copyright © 2011-2022 走看看