Как сохранить UIImage с маской

У меня есть UIImageView, который можно перемещать/масштабировать (self.imageForEditing). Поверх этого изображения у меня есть наложение с вырезанным отверстием, которое статично и не может быть перемещено. Мне нужно сохранить только ту часть основного изображения, которая видна через отверстие в момент нажатия кнопки. Моя текущая попытка:

- (IBAction)saveImage
{

    UIImage *image = self.imageForEditing.image;

    CGImageRef originalMask = [UIImage imageNamed:@"picOverlay"].CGImage;
    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(originalMask),
                                        CGImageGetHeight(originalMask),
                                        CGImageGetBitsPerComponent(originalMask),
                                        CGImageGetBitsPerPixel(originalMask),
                                        CGImageGetBytesPerRow(originalMask),
                                        CGImageGetDataProvider(originalMask), nil, YES);

    CGImageRef maskedImageRef = CGImageCreateWithMask(image.CGImage, mask);

    UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef scale:image.scale orientation:image.imageOrientation];

    CGImageRelease(mask);
    CGImageRelease(maskedImageRef);

    UIImageView *test = [[UIImageView alloc] initWithImage:maskedImage];
    [self.view addSubview:test];
}

В качестве теста я просто пытаюсь добавить вновь созданное изображение в верхний левый угол экрана. Теоретически это должно быть маленькое круглое изображение (та часть, которая была видна через оверлей). Но я просто снова создаю весь образ. Что я делаю неправильно? И как я могу объяснить тот факт, что self.imageForEditing можно перемещать?


person soleil    schedule 26.02.2013    source источник


Ответы (1)


CGImageCreateWithMask возвращает изображение того же размера, что и исходное. Вот почему вы получаете исходное изображение (я полагаю) с примененной маской.

Вы можете применить маску, а затем удалить невидимую границу. Воспользуйтесь советом из этого вопроса: iOS: как обрезать изображение до нужных частей (удалить прозрачную рамку)

Найдите границы непрозрачной части изображения и перерисуйте ее в новое изображение.

person Anton    schedule 26.02.2013