У меня есть этот код для маскировки изображения. В основном, я работаю только с изображениями PNG. Итак, у меня есть PNG-изображение 300x400 с 24-битным цветом (PNG-24). Я не уверен, что у него также есть альфа-канал. Но в этом нет прозрачности.
Тогда есть маска изображения, которая является PNG-8 бит без альфа-канала. Это только черный, полутоновый и белый.
Я создаю оба изображения как 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 остается полностью неповрежденным. Никакой маскировки не происходит. Но теперь это странно: если я поверну это, то используйте это изображение как маску, а маску, как цветное изображение в маску, тогда я получаю что-то очень уродливое в оттенках серого (но в масках;)).
Любая идея, что не так с моим кодом?
UPDATE: я просто искал Google для другого b/w png, чтобы использовать его в качестве маски. А потом это сработало! Но тот, который я сделал сам, не работает. Поэтому я предполагаю, что код имеет большие проблемы декодирования изображений. Я должен "нормализовать" изображения в определенном формате, чтобы он работал.