图片 转黑白

-(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;}
posted @ 2013-09-03 11:51  高笑228  阅读(373)  评论(0编辑  收藏  举报