Вы можете использовать Core Image, в частности фильтры CIColorPosterize
и CIPixellate
.Преимущество Core Image состоит в том, что оно использует преимущества графического процессора и будет намного быстрее, чем ручное управление растровым изображением.
Простой пример будет выглядеть примерно так:
NSURL* imageURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForImageResource:@"yourSourceImage"]];
CIImage* inputImage = [[CIImage alloc] initWithContentsOfURL:imageURL];
CIFilter* posterize = [CIFilter filterWithName:@"CIColorPosterize"];
[posterize setDefaults];
[posterize setValue:[NSNumber numberWithDouble:8.0] forKey:@"inputLevels"];
[posterize setValue:inputImage forKey:@"inputImage"];
CIFilter* pixellate = [CIFilter filterWithName:@"CIPixellate"];
[pixellate setDefaults];
[pixellate setValue:[NSNumber numberWithDouble:4.0] forKey:@"inputScale"];
[pixellate setValue:[posterize valueForKey:@"outputImage"] forKey:@"inputImage"];
CIImage* outputImage = [pixellate valueForKey:@"outputImage"];
[inputImage release];
//do something with outputImage
Вы должны игратьс приложением «Core Image Fun House», которое вы можете найти в /Developer/Applications/Graphics Tools
для получения значений для фильтров, которые дают желаемый результат.
Вы должны иметь в виду, что Core Image доступен только какiOS 5.