Iphone 对灰度图像应用颜色,保留alpha值(iOS/石英)

Iphone 对灰度图像应用颜色,保留alpha值(iOS/石英),iphone,ios,core-graphics,quartz-graphics,alphablending,Iphone,Ios,Core Graphics,Quartz Graphics,Alphablending,这可能非常简单,但我甚至不知道它叫什么——这使得谷歌搜索比平常少了一点用处 我有一个灰度线图与阿尔法消除锯齿的效果。此图形在游戏中用作玩家令牌。目前,我已经创建了两个彩色变体(在Photoshop中)。但我希望能够以编程方式着色原始图像,同时保留alpha值。我使用的是石英/岩芯图形,我怀疑可能有某种混合可以达到预期的效果,但不确定哪种或哪种方法是正确的。试试这个 颜色变化图像视图.h: #import <UIKit/UIKit.h> @interface ColorChangin

这可能非常简单,但我甚至不知道它叫什么——这使得谷歌搜索比平常少了一点用处

我有一个灰度线图与阿尔法消除锯齿的效果。此图形在游戏中用作玩家令牌。目前,我已经创建了两个彩色变体(在Photoshop中)。但我希望能够以编程方式着色原始图像,同时保留alpha值。我使用的是石英/岩芯图形,我怀疑可能有某种混合可以达到预期的效果,但不确定哪种或哪种方法是正确的。

试试这个

颜色变化图像视图.h

#import <UIKit/UIKit.h>

@interface ColorChangingImageView : UIView
@property (strong, nonatomic) UIImage *image;
@property (strong, nonatomic) UIColor *colorToChangeInto;
@end
#import "ColorChangingImageView.h"

@implementation ColorChangingImageView

@synthesize image = _image;
@synthesize colorToChangeInto = _colorToChangeInto;

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextScaleCTM(context, 1, -1);
    CGContextTranslateCTM(context, 0, -rect.size.height);

    CGImageRef maskImage = [self.image CGImage];
    CGContextClipToMask(context, rect, maskImage);

    [_colorToChangeInto setFill];
    CGContextFillRect(context, rect);

    //blend mode overlay
    CGContextSetBlendMode(context, kCGBlendModeOverlay);

    //draw the image
    CGContextDrawImage(context, rect, _image.CGImage);
}
然后,要使用它:

ColorChangingImageView *iv = [[ColorChangingImageView alloc] initWithFrame:rect];
[iv setBackgroundColor:[UIColor clearColor]]; // might not need this, not sure.
[iv setImage:[UIImage imageNamed:@"image.png"]];
[iv setColorToChangeInto:[UIColor blueColor]];
……或者说,非常接近于此。让我知道它是否适合你


您还可以将第二个参数设置为
CGContextSetBlendMode()
,以获得稍有不同的效果。

您曾经使用过这个参数吗?如果是这样,您介意发布您的解决方案吗?(我今天在这里发布了一个类似的问题:)@livingtech-不,我从来没有这样做过。但我仍然想知道这是否可能——效率合理。这绝对是可能的,我在
drawRect:
中实现了它,因此除非您要更改每帧的色调或其他内容,否则我认为您不会遇到效率问题。请参阅我发布的链接以获取我的答案(可能与您所寻找的略有不同)。事实上,也许我应该在这里发布另一个答案。谢谢。我需要一段时间才能有机会尝试一下。我已经换了工作,而且这些天没有做太多的iOS编码。。。唉.-)