Как изменить цвет частично прозрачного изображения в iOS?

У меня есть одноцветное изображение с частичной прозрачностью. У меня есть как нормальная, так и @ 2X версия образа. Я хотел бы иметь возможность изменить цвет изображения в коде. Приведенный ниже код отлично работает с обычным изображением, но @ 2X заканчивается артефактами. Обычное изображение может иметь аналогичную проблему. Если это так, я не могу обнаружить его из-за разрешения.

+(UIImage *) newImageFromMaskImage:(UIImage *)mask inColor:(UIColor *) color {
    CGImageRef maskImage = mask.CGImage;
    CGFloat width = mask.size.width;
    CGFloat height = mask.size.height;
    CGRect bounds = CGRectMake(0,0,width,height);

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef bitmapContext = CGBitmapContextCreate(NULL, width, height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
    CGContextClipToMask(bitmapContext, bounds, maskImage);
    CGContextSetFillColorWithColor(bitmapContext, color.CGColor);    
    CGContextFillRect(bitmapContext, bounds);

    CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(bitmapContext);
    CGContextRelease(bitmapContext);

    UIImage *result = [UIImage imageWithCGImage:mainViewContentBitmapContext];
    return result;
}

Если это важно, изображение маски загружается с использованием UIImage imageNamed: . Также, Я подтвердил, что изображение @ 2X загружается при запуске на имитаторе сетчатки глаза.

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

17
задан Brandon DuRette 24 March 2011 в 19:46
поделиться