2012-06-01 5 views
1

У меня есть изображение с кремовым цветом, и я хочу, чтобы его можно было нарисовать голубым (например) цветом на лету, не искажая изменение цвета, используя другое изображение.Изменение цвета изображения программно

Есть ли такая вещь в iOS? Кто-нибудь может предложить некоторые указатели на реализацию такого рода вещей?

Большое спасибо, -кода

ответ

3

Может быть GPUImage может решить вашу проблему:

Структура GPUImage является BSD лицензией IOS библиотека, которая позволяет применять GPU-ускорением фильтров и других эффектов к изображениям , видео в реальном времени и видеоролики. По сравнению с Core Image (часть iOS 5.0), GPUImage позволяет писать собственные пользовательские фильтры, поддерживает развертывание в iOS 4.0 и имеет более простой интерфейс. Однако в настоящее время он не обладает некоторыми из более сложных функций Core Image, таких как обнаружение лица.

2

Если вы специалист по RGB, вы можете делать что-либо с изображением, используя CGImage. Вы можете пройти через каждый пиксель и преобразовать пиксель крема в синий!

Ниже приведена только ваша ссылка, не считайте это ответом.

-(UIImage *) getNewImageFromImage:(UIImage *)image { 
    const int RED = 1, GREEN = 2, BLUE = 3; 

    CGRect imageRect = CGRectMake(0, 0, image.size.width*2, image.size.height*2); 

    int width = imageRect.size.width, height = imageRect.size.height; 

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

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast); 

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

    for(int y = 0; y < height; y++) { 
     for(int x = 0; x < width; x++) { 
      uint8_t * rgbaPixel = (uint8_t *) &pixels[y*width+x]; 
      rgbaPixel[RED] = <DO_SOMETHING>; 
      rgbaPixel[GREEN] = <DO_SOMETHING>; 
      rgbaPixel[BLUE] = <DO_SOMETHING>; 
     } 
    } 

    CGImageRef newImage = CGBitmapContextCreateImage(context); 

    CGContextRelease(context); 
    CGColorSpaceRelease(colorSpace); 
    free(pixels); 

    UIImage * resultUIImage = [UIImage imageWithCGImage:newImage]; 
    CGImageRelease(newImage); 

    return resultUIImage; 
} 
Смежные вопросы