图像遮罩+Iphone SDK

5

我想要遮盖两张图片

图片1:

enter image description here

图片2:

enter image description here

现在我想合并这两张图片,使图像2出现在图像1的中心。

我已阅读了“为什么这个图像遮罩代码不能工作?”“如何遮罩一张图片”

但是使用此函数:-

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

但是使用此函数后,我得到的输出为:-

图片描述


3
请参考以下链接:https://dev59.com/_nNA5IYBdhLWcg3wWsYA - Maulik
好问题@shweta,继续加油 :) - SagarPPanchal
1个回答

1
据我所知,问题并不在于 maskImage:withMask:。您发布的错误结果并没有错:当image1的像素为黑色时,image2是不可见的。
问题可能在于您使用的函数来加载imagemask,或者在生成图形输出的代码中。 实际上,我觉得你得到了正确的输出,但使用了错误的颜色空间(灰度而没有alpha)。请检查您提供的参数image 是否实际上是RGBa格式,并且返回的UIImage是否在使用设备灰度作为颜色空间的其他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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接