如何实现qq头像致灰功能?

//使用sdwebimage加载图片,之后调用致灰方法

     [_iconImageView sd_setImageWithURL:[NSURL URLWithString:orderItems.iconUrl] placeholderImage:[UIImage imageNamed:@"home_root_headImage"]      completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {

     UIImage *grayImage = [self convertToGrayscaleWith:image];

     if (grayImage) {

              _iconImageView.image = grayImage;

     } else {

              _iconImageView.image = [UIImage imageNamed:@"home_root_headImage"];

     }

 

 }];

 

 

 

//致灰功能的方法

- (UIImage *)convertToGrayscaleWith:(UIImage *)scousImage {

    CGSize size = [scousImage size];

    int width = size.width;

    int height = size.height;

    

    // the pixels will be painted to this array

    uint32_t *pixels = (uint32_t *) malloc(width * height * sizeof(uint32_t));

    

    // clear the pixels so any transparency is preserved

    memset(pixels, 0, width * height * sizeof(uint32_t));

    

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    

    // create a context with RGBA pixels

    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace,

                                                 kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast);

    

    // paint the bitmap to our context which will fill in the pixels array

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), [scousImage CGImage]);

    

    for(int y = 0; y < height; y++) {

        for(int x = 0; x < width; x++) {

            uint8_t *rgbaPixel = (uint8_t *) &pixels[y * width + x];

            

            // convert to grayscale using recommended method: http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale

            uint32_t gray = 0.3 * rgbaPixel[RED] + 0.59 * rgbaPixel[GREEN] + 0.11 * rgbaPixel[BLUE];

            

            // set the pixels to gray

            rgbaPixel[RED] = gray;

            rgbaPixel[GREEN] = gray;

            rgbaPixel[BLUE] = gray;

        }

    }

    

    // create a new CGImageRef from our context with the modified pixels

    CGImageRef image = CGBitmapContextCreateImage(context);

    

    // we're done with the context, color space, and pixels

    CGContextRelease(context);

    CGColorSpaceRelease(colorSpace);

    free(pixels);

    

    // make a new UIImage to return

    UIImage *resultUIImage = [UIImage imageWithCGImage:image];

    

    // we're done with image now too

    CGImageRelease(image);

    

    return resultUIImage;

}

 

转载于:https://www.cnblogs.com/sanvow/p/5641362.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值