图像掩蔽+ Iphone SDK

时间:2011-12-13 11:03:13

标签: iphone objective-c uiimage

我想掩盖两张图片

图片1:

enter image description here

图片2:

enter image description here

现在我想合并这两个图像,如图像2将位于图像1的中心。

我看过Any idea why this image masking code does not work?"How to Mask an Image"

但是在使用此功能时: -

- (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];
}

但是通过使用这个函数,我得到的输出是: -

enter image description here

1 个答案:

答案 0 :(得分:1)

据我所知,问题不在于maskImage:withMask:。您发布的错误输出没有错:image1的像素为黑色,图像2不可见。

问题可能在于您用于加载imagemask的函数,或者在生成图形输出的代码中。 实际上在我看来你得到了正确的输出,但是使用了错误的色彩空间(没有alpha的灰度)。检查您提供的参数image是否实际上是RGBa格式,以及返回的UIImage是否未使用DeviceGray作为颜色空间绘制到其他CGContext上。

我想到的另一个可能的原因是你反转了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];

}

我得到以下输出(这是正确的):

image2 using image1 as mask

如果错误地将im1与im2反转,则会得到未修改的image1。