Фильтрация изображений - PullRequest
       12

Фильтрация изображений

0 голосов
/ 25 октября 2011

У меня есть приложение, которое требует некоторой работы с фильтрами изображений, поэтому я только начал работать с фильтрами и получил несколько фильтров, таких как черно-белый, Hud, мох, яркость, контрастность и т. Д.

Вот несколько фильтров, с которыми мне приходится сталкиваться при достижении

  1. Ностальгия
  2. Винтаж
  3. Старый

Исходное изображение

enter image description here

Ностальгия

enter image description here

винтаж

enter image description here

старый

enter image description here

Если бы кто-нибудь смог направить меня в правильном направлении, было бы замечательно.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 26 октября 2011

Эта ветка очень информативна о фильтрации изображений в iphone ...

EDIT

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

//first increase contrast a bit...
float contrastValue             =   1.45;
CGImageRef originalImage        =   [myImage CGImage];
CGColorSpaceRef colorSpace      =   CGColorSpaceCreateDeviceRGB();
CGContextRef bitmapContext      =   CGBitmapContextCreate(NULL,CGImageGetWidth(originalImage),CGImageGetHeight(originalImage),8,CGImageGetWidth(originalImage)*4,colorSpace,kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(bitmapContext, CGRectMake(0, 0, CGBitmapContextGetWidth(bitmapContext), CGBitmapContextGetHeight(bitmapContext)), originalImage);
UInt8* data                     =   CGBitmapContextGetData(bitmapContext);
int numComponents               =   4;
int bytesInContext              =   CGBitmapContextGetHeight(bitmapContext) * CGBitmapContextGetBytesPerRow(bitmapContext);
double redIn, greenIn, blueIn;

for (int i = 0; i < bytesInContext; i += numComponents) {
    redIn                       =   (double)data[i]/255.0;
    greenIn                     =   (double)data[i+1]/255.0;
    blueIn                      =   (double)data[i+2]/255.0;

    redIn                       -=  0.5;
    redIn                       *=  contrastValue;
    redIn                       +=  0.5;
    redIn                       *=  255.0;
    if (redIn < 0) {
        redIn                   =   0;
    }
    if (redIn > 255) {
        redIn                   =   255;
    }

    greenIn                     -=  0.5;
    greenIn                     *=  contrastValue;
    greenIn                     +=  0.5;
    greenIn                     *=  255.0;
    if (greenIn < 0) {
        greenIn                 =   0;
    }
    if (greenIn > 255) {
        greenIn                 =   255;
    }


    blueIn                      -=  0.5;
    blueIn                      *=  contrastValue;
    blueIn                      +=  0.5;
    blueIn                      *=  255.0;
    if (blueIn < 0) {
        blueIn                  =   0;
    }
    if (blueIn > 255) {
        blueIn                  =   255;
    }
    data[i]                     =   (redIn);
    data[i+1]                   =   (greenIn);
    data[i+2]                   =   (blueIn);
}
CGImageRef outImage             =   CGBitmapContextCreateImage(bitmapContext);
myImage                         =   [UIImage imageWithCGImage:outImage];
CGImageRelease(outImage);

//Then blend it with a yellowish color
UIGraphicsBeginImageContext(myImage.size);
CGContextRef ctx                =   UIGraphicsGetCurrentContext();
CGRect area                     =   CGRectMake(0, 0, myImage.size.width, myImage.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -area.size.height);
CGContextSaveGState(ctx);
CGContextClipToMask(ctx, area, myImage.CGImage);
UIColor *color                  =   [UIColor colorWithRed:248.0/255.0 green:254.0/255.0 blue:186.0/255.0 alpha:1.0]; //[UIColor colorWithRed:248.0/255.0 green:254.0/255.0 blue:186.0/255.0 alpha:1.0]
[color set];
CGContextFillRect(ctx, area);
CGContextRestoreGState(ctx);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextDrawImage(ctx, area, myImage.CGImage);
myImage                         =   UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIGraphicsBeginImageContext(myImage.size);
ctx                             =   UIGraphicsGetCurrentContext();
 area                           =   CGRectMake(0, 0, myImage.size.width, myImage.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -area.size.height);
CGContextSaveGState(ctx);
CGContextClipToMask(ctx, area, myImage.CGImage);
color                           =   [UIColor colorWithRed:27.0/255.0 green:50.0/255.0 blue:224.0/255.0 alpha:0.2]; //[UIColor colorWithRed:248.0/255.0 green:254.0/255.0 blue:186.0/255.0 alpha:1.0]
[color set];
CGContextFillRect(ctx, area);
CGContextRestoreGState(ctx);
CGContextSetBlendMode(ctx, kCGBlendModeLighten);
CGContextDrawImage(ctx, area, myImage.CGImage);
processedImage                  =   UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

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

0 голосов
/ 27 октября 2011

Похоже, вам нужно определить параметры преобразования RGB.Если у вас уже есть инструмент для создания эффектов «винтаж», «старый» и «ностальгия», вы можете обработать образец изображения, содержащий все 256 ^ 3 цветов RGB (например, этот ), затемнаблюдайте, например, цветовой канал за цветовым каналом, чтобы просто начать, как изменяются значения пикселей.Этого может быть достаточно, чтобы вывести функцию преобразования RGB.А «старым» потребуется темная тень на границе.

0 голосов
/ 25 октября 2011

при первой проверке Базовое изображение документации . Базовое изображение поставляется с iOS 5.0 и является мощным API обработки изображений.

Также вы можете использовать Quartz для рисования изображения и над слоем с различными параметрами наложения (CGContextSetBlendMode) для достижения некоторых приятных эффектов.

Если этих методов недостаточно, попробуйте изменить значения цвета пиксель за пикселем. Попробуйте это url , может быть, вы найдете что-то для вас.

...