0

我有一个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可以移动的事实?

4

1 回答 1

0

CGImageCreateWithMask返回与原始图像大小相同的图像。这就是为什么你会得到带有蒙版的原始图像(我假设)。

您可以应用蒙版,然后删除不可见的边框。使用这个问题的建议:iOS:如何将图像修剪到有用的部分(删除透明边框)

找到图像不透明部分的边界并将其重新绘制成新图像。

于 2013-02-26T16:20:23.317 回答