我有這段代碼來掩蓋圖像。基本上,我只使用PNG圖像。所以我有一個24位色彩(PNG-24)的300x400 PNG圖像。我不確定它是否也有alpha通道。但它沒有透明度。任何想法爲什麼這個圖像掩碼不起作用?
然後,存在圖像掩模是PNG-8位無alpha通道。它只是黑色,灰度和白色。
我創建這兩個圖像作爲UIImage的。將它們放入UIImageView時都可以正確顯示。
然後,我創建的UIImage了出來其中包含屏蔽操作的結果,使用此代碼:
+ (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);
return [UIImage imageWithCGImage:masked];
}
這裏就是我做的是:
UIImage *image = [UIImage imageNamed:@"coloredImagePNG24.png"];
UIImage *maskImage = [UIImage imageNamed:@"theMaskPNG8_Grayscale_NoAlpha.png"];
UIImage *maskedImage = [MyGraphicUtils maskImage:image withMask:maskImage];
UIImageView *testImageView = [[UIImageView alloc] initWithImage:maskedImage];
testImageView.backgroundColor = [UIColor clearColor];
testImageView.opaque = NO;
畢竟是, coloredImagePNG24.png保持完好無損。沒有掩蔽正在發生。但現在奇怪的是:如果我把周圍的,即使用這個形象的面具,面具的彩色圖像到面膜,然後我得到的東西在灰度非常難看(但屏蔽;))。
任何想法有什麼錯我的代碼?
更新:我只是用Google搜索的不同的B/W巴紐使用它作爲一個面具。然後這個工作!但是我自己做的那個不起作用。所以我認爲代碼有很大的圖像解碼問題。我將不得不將圖像「歸一化」爲特定的格式,以便它能夠正常工作。
雖然看起來很漂亮,在我的情況它只是使圖像完全透明。看到我上面的更新。我想出了一些奇怪的東西。 – Thanks 2009-07-15 20:07:37
我在上面的代碼中使用了一個變體,將在Photoshop中創建的蒙版轉換爲「灰度」並導出爲24位PNG。 – Ramin 2009-07-15 22:44:42
如果您想使用上面的代碼,請確保包含該掩碼的圖像文件是不具有Alpha通道的24位PNG。例如,Pixelmator不會告訴你這些信息。你需要使用Photoshop或Gimp。 – 2014-05-06 05:42:53