iOS處理圖片顏色代碼

d3fw 10年前發布 | 2K 次閱讀 Objective-C IOS

處理圖片顏色

  • (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>

 本文由用戶 d3fw 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!