在图像上添加色调

5
我正在创建一个应用程序,使用UIImagePickerController呈现相机给用户,并在自定义叠加层中包括两个网格/模式之一覆盖在相机“视图”本身上。网格本身是以UIImageView中的.png文件形式添加到叠加层中的,它们非常复杂,因此我真的不想在代码中绘制网格,即使这会提供一个漂亮干净和简单的答案来回答我的问题。我想能够提供各种颜色的网格。明显的解决方案是创建更多不同颜色的.png图像,但对于每种颜色,都必须有四个单独的图像(每个网格的常规和视网膜版本),因此这将迅速增加许多资源。我认为最理想的解决方案是只创建白色/灰色的网格,然后应用着色来适当地着色它。这可能吗?还是我需要寻找其他解决方案?

请查看此处:https://dev59.com/OXNA5IYBdhLWcg3wBpLs - shannoga
2
你看过这篇帖子了吗?它似乎更接近你所需要的。 - Ananth
1个回答

9
感谢 Ananth 指出了我需要的答案,他引导我访问 iPhone - How do you color an image?
我已经按照问题中建议的方式添加了这个方法到我的代码中,并参考了 willc2 的答案对其进行了修改。
-(UIImage *)colorizeImage:(UIImage *)baseImage color:(UIColor *)theColor {
    UIGraphicsBeginImageContext(baseImage.size);

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGRect area = CGRectMake(0, 0, baseImage.size.width, baseImage.size.height);

    CGContextScaleCTM(ctx, 1, -1);
    CGContextTranslateCTM(ctx, 0, -area.size.height);
    CGContextSaveGState(ctx);
    CGContextClipToMask(ctx, area, baseImage.CGImage);
    [theColor set];
    CGContextFillRect(ctx, area);
    CGContextRestoreGState(ctx);
    CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
    CGContextDrawImage(ctx, area, baseImage.CGImage);
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

...我得到了我想要的准确结果。


不要使用这个。它会降低图像质量。使用这个,没有质量损失:https://dev59.com/K3M_5IYBdhLWcg3wzmgw#4630136 - Almas Adilbek
非常感谢。我已经束手无策地尝试让颜色正常工作,而这似乎是唯一一个正常运作的方法。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接