2014-01-07 98 views
4

我有一個懸停在按鈕上的圖標。該圖標是黑色和白色,我希望以編程方式「黑色」切出黑色區域。iOS UIImage如何將黑色轉換爲透明編程?

如何將圖標的黑色區域以編程方式轉換爲透明?

enter image description here

+3

多麼愚蠢的理由關閉問題...沒有人被允許在這裏學習。 –

回答

8

您可以使用核心圖像過濾器 - 特別是過濾CIMaskToAlpha

有關詳細說明這裏使用CIFilters是Apple's Core Image Programming GuideRayWenderlich tutorial

編輯:此過濾器採用黑色像素並使它們完全透明,並用不透明的白色替代像素,用部分透明的灰色替代像素等。

-(void)setImage:(UIImage *)image_ 
{ 

    UIImage *entryImage = image_; 
    CIContext *context = [CIContext contextWithOptions:nil]; 

    CIImage *image = [CIImage imageWithCGImage:[entryImage CGImage]]; 
    CIFilter *filter = [CIFilter filterWithName:@"CIMaskToAlpha"]; 
    [filter setDefaults]; 
    [filter setValue:image forKey:kCIInputImageKey]; 
    // CIImage *result = [filter valueForKey:kCIOutputImageKey]; 
    CIImage *result = [filter outputImage]; 

    CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]]; 

    UIImage *newImage = [UIImage imageWithCGImage:cgImage scale:[entryImage scale] orientation:UIImageOrientationUp]; 
    CGImageRelease(cgImage); 
    [super setImage:newImage]; 
} 
0

圖像將是原始圖像大小的透明正方形,並且應該用白色遮罩完整的黑色區域。當我們在實際的方形圖像上覆蓋這個蒙版圖像時,輸出將是預期的圖像。

一旦你準備好了蒙版圖像,就實現蒙版圖像的功能。

//掩蔽略圖圖像

+(UIImage*) maskImage:(UIImage *)thumbImage withMask:(UIImage *)maskImage 
{ 

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
             CGImageGetHeight(maskRef), 
             CGImageGetBitsPerComponent(maskRef), 
             CGImageGetBitsPerPixel(maskRef), 
             CGImageGetBytesPerRow(maskRef), 
             CGImageGetDataProvider(maskRef), NULL, false); 

    CGImageRef masked = CGImageCreateWithMask([thumbImage CGImage], mask); 
    CGImageRelease(mask); 
    UIImage *maskedImage = [UIImage imageWithCGImage:masked]; 
    CGImageRelease(masked); 
    return maskedImage; 

}