UIImage的灰化处理

- (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();
    CGContextRefcontext = 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), [iCGImage]);
   CGContextRelease(context);
   CGColorSpaceRelease(colorSpace);
    // nowconvert to grayscale
    uint8_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);
    // convertfrom a gray scale image back into a UIImage
    uint8_t*result = (uint8_t *) calloc(m_width * m_height *sizeof(uint32_t),1);
    // processthe image back to rgb
    for(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 aUIImage
    colorSpace =CGColorSpaceCreateDeviceRGB();
    context =CGBitmapContextCreate(result, m_width, m_height, 8, m_width *sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little |kCGImageAlphaNoneSkipLast);
    CGImageRefimage = CGBitmapContextCreateImage(context);
   CGContextRelease(context);
   CGColorSpaceRelease(colorSpace);
    UIImage*resultUIImage = [UIImage imageWithCGImage:image];
   CGImageRelease(image);
    // make surethe data will be released by giving it to an autoreleasedNSData
    [NSDatadataWithBytesNoCopy:result length:m_width * m_height];
    returnresultUIImage;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值