Насколько я могу судить, проблема не в maskImage:withMask:
. Неправильный вывод, который вы опубликовали, не является неправильным: там, где пиксели изображения1 черные, изображение2 не видно.
Возможно, проблема в функциях, которые вы использовали для загрузки image
и mask
, или в коде, создающем графический вывод.
На самом деле мне кажется, что вы получили правильный вывод, но с использованием неправильного цветового пространства (оттенки серого без альфа). Проверьте, действительно ли указанный вами аргумент image
представлен в формате RGBa, и не возвращается ли возвращенный UIImage
в какой-либо другой CGContext
с использованием DeviceGray в качестве цветового пространства.
Другая возможная причина, которая приходит мне в голову, это то, что вы перевернули image1 и image2. Согласно документации, mask
должен быть увеличен до размера image
(см. Ниже), но у вас есть маленькое изображение там. Это представляется разумным также и потому, что image1 находится в градациях серого, хотя, когда я попытался поменять местами image1 и image2, я получил image1 неизмененным в качестве вывода.
Для запуска тестов я использовал прикрепленные изображения, а затем скопировал и вставил метод -(UIImage *)maskImage:(UIImage *)image withMask:(UIImage *)maskImage
как есть.
Я использовал простой проект iOS с одним представлением и UIImageView
внутри (с тегом 1) и следующий код в контроллере:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIImageView *imageView=(UIImageView *)[self.view viewWithTag:1];
UIImage *im1=[UIImage imageNamed:@"image1"];
UIImage *im2=[UIImage imageNamed:@"image2"];
imageView.image=[self maskImage:im2 withMask:im1];
}
Я получаю следующий вывод (который является правильным):
Если по ошибке вы инвертируете im1 с помощью im2, вы получите вместо image1 неизменное.