【问题标题】:iPhone UIView replace image color programmatically, like in Photoshop or IllustratoriPhone UIView 以编程方式替换图像颜色,例如在 Photoshop 或 Illustrator 中
【发布时间】:2012-03-17 05:54:02
【问题描述】:

我想在我的应用程序中重复使用一组图形。它们是具有透明度的按钮和图像。与其拥有几十个硬编码的按钮图像,我更愿意拥有一个按钮图像,并且能够动态地为其分配颜色,例如导航栏和它的色调颜色。

是否可以替换/改变 UIView 的色调?

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

有没有办法在将两个图像混合在一起时保持透明区域透明?我听说有剪贴蒙版,但从未使用过它们。

谢谢!

更新:

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

-(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);

}

【问题讨论】:

    标签: iphone objective-c uiview core-graphics


    【解决方案1】:

    我对这段代码 sn-p 感到非常兴奋。它完全改变了图形或按钮的色调。矢量图形看起来像我在 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]];
        }
    
    
    }
    

    【讨论】:

    • 色调值不会改变每次原始图像的显示......你能告诉我问题是什么......
    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 2013-02-11
    • 2020-07-01
    • 2023-03-31
    • 1970-01-01
    • 2011-01-16
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多