【问题标题】:Image Masking+Iphone SDK图像遮罩+iPhone SDK
【发布时间】:2011-12-13 11:03:12
【问题描述】:

我想屏蔽两张图片

图片1:

图 2:

现在我想合并这两个图像,比如图像 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];
}

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

【问题讨论】:

标签: iphone objective-c uiimage


【解决方案1】:

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

问题可能出在您用来加载image 和mask 的函数中,或者出在生成图形输出的代码中。 实际上,在我看来,您得到了正确的输出,但使用了错误的色彩空间(没有 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];

}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-23
    • 2018-05-29
    • 2016-06-09
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    相关资源
    最近更新 更多