iPhone UIView以编程方式替换图像颜色,如在Photoshop或Illustrator中

iPhone UIView以编程方式替换图像颜色,如在Photoshop或Illustrator中,iphone,objective-c,uiview,core-graphics,Iphone,Objective C,Uiview,Core Graphics,我有一套图形,我想在我的应用程序中重复使用。它们是具有透明度的按钮和图像。我不希望有几十个硬编码的按钮图像,我希望有一个按钮图像,并且能够动态地为它指定颜色,比如导航栏和它的色调 是否可以替换/移动UIView的色调? 或者: 我知道,如果我将一个透明图像覆盖在另一个UIView上,那么我可以更改背景颜色,这两个图像将混合在一起。但透明区域将呈现背景的色调 在将两幅图像混合在一起时,有没有办法保持透明区域的透明?我听说有剪辑遮罩,但从未使用过 谢谢大家! 更新: 这应该可以工作,但返回nil i

我有一套图形,我想在我的应用程序中重复使用。它们是具有透明度的按钮和图像。我不希望有几十个硬编码的按钮图像,我希望有一个按钮图像,并且能够动态地为它指定颜色,比如导航栏和它的色调

是否可以替换/移动UIView的色调?

或者: 我知道,如果我将一个透明图像覆盖在另一个UIView上,那么我可以更改背景颜色,这两个图像将混合在一起。但透明区域将呈现背景的色调

在将两幅图像混合在一起时,有没有办法保持透明区域的透明?我听说有剪辑遮罩,但从未使用过

谢谢大家!

更新:

这应该可以工作,但返回nil image,我看到其他人报告了相同的问题。也许这在将来会起作用

-(void)doHueAdjustFilter
{

    //does not work, returns nil image
    CIImage* inputImage = [CIImage imageWithCGImage:[[UIImage imageNamed:@"button.jpg"]CGImage]];

    CIFilter *myFilter;
    NSDictionary *myFilterAttributes;
    myFilter = [CIFilter filterWithName:@"CIHueAdjust"];
    [myFilter setDefaults];

    myFilterAttributes = [myFilter attributes];
    [myFilterAttributes setValue:inputImage forKey:@"inputImage"];
    [myFilterAttributes setValue:[NSNumber numberWithFloat:0.9] forKey:@"inputAngle"];


    CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *ciimage = [myFilter outputImage];
    CGImageRef cgimg = [context createCGImage:ciimage fromRect:[ciimage extent]];
    UIImage *uimage = [UIImage imageWithCGImage:cgimg scale:1.0f orientation:UIImageOrientationUp];
    [caduceusImageView setImage:uimage];
    CGImageRelease(cgimg);

}

我对这段代码感到非常兴奋。它完全改变了图形或按钮的色调。矢量图形看起来像我在illustrator中改变了色调。这节省了大量的时间,因为我不再需要放弃我的工作,切换到illustrator并开始绘制不同颜色的按钮一个按钮适用于所有人

在iOS5上工作

-(UIImage*)doHueAdjustFilterWithBaseImageName:(NSString*)baseImageName hueAdjust:(CGFloat)hueAdjust
{

    CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:baseImageName]];
    CIFilter * controlsFilter = [CIFilter filterWithName:@"CIHueAdjust"];
    [controlsFilter setValue:inputImage forKey:kCIInputImageKey];

    [controlsFilter setValue:[NSNumber numberWithFloat:hueAdjust] forKey:@"inputAngle"];

    NSLog(@"%@",controlsFilter.attributes);
    CIImage *displayImage = controlsFilter.outputImage;
    UIImage *finalImage = [UIImage imageWithCIImage:displayImage];

    CIContext *context = [CIContext contextWithOptions:nil];
    if (displayImage == nil || finalImage == nil) {
        // We did not get output image. Let's display the original image itself.
       return  [UIImage imageNamed:baseImageName];
    }else {
        // We got output image. Display it.
        return  [UIImage imageWithCGImage:[context createCGImage:displayImage fromRect:displayImage.extent]];
    }


}

色调值不会每次显示原始图像时都改变。你能告诉我问题出在哪里吗。。。。。。。