2012-02-27 43 views
3

我有一組圖形,我想在我的應用程序中重新使用。它們是帶有透明度的按鈕和圖像。我不希望有幾十個硬編碼的按鈕圖像,我希望只有一個按鈕圖像,並且能夠動態地爲其分配顏色,如導航欄和它的色調。iPhone UIView以編程方式替換圖像顏色,就像在Photoshop或Illustrator中一樣

是否有可能取代/移動UIView的色調?

或者: 我知道,如果我在另一個UIView上覆蓋透明圖像,那麼我可以更改背景顏色並將兩個圖像混合在一起。但透明區域將呈現背景的色調。

有沒有辦法讓透明區域保持透明,而將兩個圖像混合在一起?我聽說有剪裁面具,但從未與他們合作過。

謝謝!

更新:

這應該工作,但是返回零的形象,我看到別人報告了同樣的問題。也許這將在未來工作

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

} 

回答

5

我對這段代碼感到非常興奮。它完全改變圖形或按鈕的色調。矢量圖形看起來像我改變插畫家的色調。這樣可以節省大量時間,因爲我不再需要放下工作,切換到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]]; 
    } 


} 
+0

色調值其不會改變其顯示每一次原始圖像........ u能告訴我西隧的問題....... – 2014-05-17 06:01:47

相關問題