Можно ли выделить один цвет в UIImage / CGImageRef - PullRequest
1 голос
/ 28 июля 2011

Интересно, есть ли способ выделить один цвет в изображении, используя маски или, возможно, даже пользовательское цветовое пространство. В конечном итоге я ищу быстрый способ выделения 14 цветов из изображения - подумал, что если бы был метод маскировки, он мог бы быть быстрее, чем проходить по пикселям.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 28 июля 2011

Вы можете использовать пользовательское цветовое пространство (документация здесь ) и затем заменить его на "CGColorSpaceCreateDeviceGray ()" в следующем коде:

- (UIImage *)convertImageToGrayScale:(UIImage *)image
{
  // Create image rectangle with current image width/height
  CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);

  // Grayscale color space 
  CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); // <- SUBSTITUTE HERE

  // Create bitmap content with current image size and grayscale colorspace
  CGContextRef context = CGBitmapContextCreate(nil, image.size.width, image.size.height, 8, 0, colorSpace, kCGImageAlphaNone);

  // Draw image into current context, with specified rectangle
  // using previously defined context (with grayscale colorspace)
  CGContextDrawImage(context, imageRect, [image CGImage]);

  // Create bitmap image info from pixel data in current context
  CGImageRef imageRef = CGBitmapContextCreateImage(context);

  // Create a new UIImage object  
  UIImage *newImage = [UIImage imageWithCGImage:imageRef];

  // Release colorspace, context and bitmap information
  CGColorSpaceRelease(colorSpace);
  CGContextRelease(context);
  CFRelease(imageRef);

  // Return the new grayscale image
  return newImage;
}

Этот код взят из этого блога , на который стоит обратить внимание при удалении цветов из изображений.

...