У меня есть этот код для маскировки изображения. В основном я работаю только с изображениями PNG. Итак, у меня есть изображение PNG размером 300x400 с 24-битным цветом (PNG-24). Я не уверен, есть ли у него альфа-канал. Но в этом нет прозрачности.
Затем, существует маска изображения PNG-8bit без альфа-канала. Это просто черный, оттенки серого и белый.
Я создаю оба изображения как 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;
После всего этого colorImagePNG24.png остается полностью без изменений. Никакой маскировки не происходит. Но теперь странная вещь: если я переверну это, то есть использую это изображение в качестве маски, а маску в качестве цветного изображения в маску, то я получу нечто очень уродливое в оттенках серого (но замаскированное;)). 1013 *
Есть идеи, что случилось с моим кодом?
ОБНОВЛЕНИЕ: я просто гуглил другой ч / б png, чтобы использовать его в качестве маски. И тогда этот работал! Но тот, который я сделал сам, не работает. Поэтому я предполагаю, что в коде есть большие проблемы с декодированием изображений. Мне бы пришлось «нормализовать» изображения к определенному формату, чтобы он работал.