2009-07-10 5 views
2

У меня есть UIImage (созданный пользовательским рисунком), который имеет белый фон. Я хотел бы сделать белые части этого изображения прозрачными. Я также хотел бы сохранить это в PNG-файле.Как маскировать UIImage, чтобы белый стал прозрачным на iphone?

Я огляделся на форумах, но не могу понять, как правильно маскировать изображение. Кто-нибудь пробовал это раньше?

Спасибо.

+1

Дубликат: http://stackoverflow.com/questions/633722/how-to-make-one-color-transparent-on-a-uiimage –

ответ

0

Вы можете попытаться сделать полностью прозрачным исходный UIImage, а затем за ним позади белый UIImageView.

0

Вам нужно будет получить необработанные данные, искать белые пиксели, изменять альфа этих пикселей и сохранять их в новый объект NSData, а затем преобразовывать их в PNG.

Это не сложно, но я бы не назвал это тривиальным.

3

попробовать что-то вроде этого ...

CGImageRef myMaskedImage = [myImage CGImage]; 
const float whiteMask[6] = { 255,255,255, 255,255,255 }; 
CGImageRef myColorMaskedImage = CGImageCreateWithMaskingColors(image, whiteMask); 

CGDataProviderRef provider; 
CGImageRef myPngImage = CGImageCreateWithPNGDataProvider(provider, NULL, true, kCGRenderingIntentDefault); 

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt: 72], kCGImagePropertyDPIHeight, [NSNumber numberWithInt: 72], kCGImagePropertyDPIWidth, nil]; 
CGImageDestinationRef destRef = CGImageDestinationCreateWithURL ((CFURLRef)outPath, (CFStringRef)@"image.png" , 1, NULL); 
CGImageDestinationAddImage(destRef, myPngImage, (CFDictionaryRef)options); 
CGImageDestinationFinalize(destRef); 
CGRelease(destRef); 

CGImageRelease(myColorMaskedImage); 
CGImageRelease(myPngImage); 

из довольно долго наматывается Quartz2d Programming Guide и this mailing list message.