2009-07-16 110 views
2

我有一個300 x 400像素PNG-24 alpha通道。大約140kb。我想掩蓋一些部分,所以我創建了另一個300 x 400圖像作爲PNG-24,但只有黑色,灰色和白色,沒有alpha通道。爲什麼我的圖像遮罩會使圖像變黑,遮罩是白色的?

奇怪的是:那裏的面具是黑色的,圖像只是保持原來的。沒有透明度。但是,如果面膜是白色的,圖像變黑只是黑色。沒有透明度。

它在50 x 50像素的非常小的圖像上部分工作。任何想法這個功能可能是錯誤的?

+ (UIImage*)maskImage:(UIImage*)image 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 theImage = image.CGImage; 
    CGImageRef masked = CGImageCreateWithMask(theImage, mask); 
    return [UIImage imageWithCGImage:masked]; 
} 

我的背景是橙色的,所以這種顏色應該透過。保存圖像的UIImageView被設置爲clearColor/transparency和opaque = NO。

回答

0

我想你的代碼是from here。有此評論:

我已經提高了代碼,以便它可以 正確地掩蓋沒有 alpha通道圖像。

所以,如果它不適合你,也許你的圖片沒有alpha通道。

+0

謝謝!我想我的愚蠢的圖形應用程序不會創建一個alpha通道,如果我沒有透明像素,即使我保存時檢查「透明」。這是問題! – Thanks 2009-07-16 09:41:23

0

小心 - 代碼泄露!直到在循環中運行此方法時,我才注意到它。確保在返回圖像之前撥打CGImageRelease(mask)CGImageRelease(masked)

- (UIImage*) maskImage:(UIImage *)image 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(image.CGImage, mask); 

    UIImage *img = [UIImage imageWithCGImage:masked]; 

    //otherwise we will leak 
    CGImageRelease(mask); 
    CGImageRelease(masked); 

    return img; 
}