前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >iOS处理图片颜色代码

iOS处理图片颜色代码

原创
作者头像
用户8983410
修改2021-11-01 09:12:03
修改2021-11-01 09:12:03
1.8K00
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
复制
处理图片颜色

(UIImage)grayscale:(UIImage)anImage type:(int)type{
  CGImageRef imageRef = anImage.CGImage;
  size_t width  = CGImageGetWidth(imageRef);
  size_t height = CGImageGetHeight(imageRef);
  size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef);
  size_t bitsPerPixel = CGImageGetBitsPerPixel(imageRef);
  size_t bytesPerRow = CGImageGetBytesPerRow(imageRef);
  CGColorSpaceRef colorSpace = CGImageGetColorSpace(imageRef);
  CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
  bool shouldInterpolate = CGImageGetShouldInterpolate(imageRef);
  CGColorRenderingIntent intent = CGImageGetRenderingIntent(imageRef);
  CGDataProviderRef dataProvider = CGImageGetDataProvider(imageRef);
  CFDataRef data = CGDataProviderCopyData(dataProvider);
  UInt8 buffer = (UInt8)CFDataGetBytePtr(data);
  NSUInteger  x, y;
  for (y = 0; y < height; y++) {

  for (x = 0; x < width; x++) {
      UInt8 *tmp;
      tmp = buffer + y * bytesPerRow + x * 4;
      UInt8 red,green,blue;
      red = *(tmp + 0);
      green = *(tmp + 1);
      blue = *(tmp + 2);
      UInt8 brightness;

      switch (type) {
          case 1:
              brightness = (77 * red + 28 * green + 151 * blue) / 256;
              *(tmp + 0) = brightness;
              *(tmp + 1) = brightness;
              *(tmp + 2) = brightness;
              break;
          case 2:
              *(tmp + 0) = red;
              *(tmp + 1) = green * 0.7;
              *(tmp + 2) = blue * 0.4;
              break;
          case 3:
              *(tmp + 0) = 255 - red;
              *(tmp + 1) = 255 - green;
              *(tmp + 2) = 255 - blue;
              break;
          default:
              *(tmp + 0) = red;
              *(tmp + 1) = green;
              *(tmp + 2) = blue;
              break;
      }

  }

}
  CFDataRef effectedData = CFDataCreate(NULL, buffer, CFDataGetLength(data));
  CGDataProviderRef effectedDataProvider = CGDataProviderCreateWithCFData(effectedData);
  CGImageRef effectedCgImage = CGImageCreate(

                                         width, height,
                                         bitsPerComponent, bitsPerPixel, bytesPerRow,
                                         colorSpace, bitmapInfo, effectedDataProvider,
                                         NULL, shouldInterpolate, intent);

UIImage *effectedImage = [[UIImage alloc] initWithCGImage:effectedCgImage];
  CGImageRelease(effectedCgImage);
  CFRelease(effectedDataProvider);
  CFRelease(effectedData);
  CFRelease(data);
  return effectedImage;
}</pre> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档