У меня 300 x 400 пикселей PNG-24 с альфа-каналом. Это около 140 КБ. Я хочу замаскировать некоторые его части, поэтому я создал еще одно изображение размером 300 x 400 в формате PNG-24, но только с черным, серым и белым без альфа-канала.
Странная вещь: где маска черная, изображение остается оригинальным. Нет прозрачности. Но там, где маска белая, изображение становится черным, а не черным. Нет прозрачности.
Работает частично на очень маленьких изображениях, таких как 50 х 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 / прозрачность и непрозрачный = NO.