CIBlendWithMask大小

时间:2013-08-28 11:52:53

标签: iphone ios objective-c cgcontext cifilter

我正在尝试使用过滤器创建一个带掩码的图像。我有3张图片,所有图片大小相同:

(lldb) p img1.size
(CGSize) $33 = (width=369, height=370)
(lldb) p img2.size
(CGSize) $34 = (width=369, height=370)
(lldb) p img3.size
(CGSize) $36 = (width=369, height=370)

然后我为他们分配CIImages:

CIImage *inputImage = [[CIImage alloc] initWithCGImage:img1.CGImage options:nil];
CIImage *bgImage = [[CIImage alloc] initWithCGImage:img2.CGImage options:nil];
CIImage *maskImage = [[CIImage alloc] initWithCGImage:img3.CGImage options:nil];

使用给定的CIImages创建CIFilter:

CIFilter *filter = [CIFilter filterWithName:@"CIBlendWithMask"];
[filter setValue:inputImage forKey:@"inputImage"];
[filter setValue:bgImage forKey:@"inputBackgroundImage"];
[filter setValue:maskImage forKey:@"inputMaskImage"];
CIImage *outputImage = [filter outputImage];

然而,当我试图像这样得到outputImage时:

CGImageRef outputRef = [_context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *result = [UIImage imageWithCGImage:outputRef];
CGImageRelease(outputRef);

结果图片的大小很奇怪:

(lldb) p outputImage.size
(CGSize) $37 = (width=738, height=740)

当我查看图像时,它位于左下角(CGContext倒Y轴)并且具有这3个初始图像的大小(宽度= 369,高度= 370),其余图像大小仅为空(alpha = 0.0f)。面具适用于整个区域,没关系。

重要的是,在开始时我会做这样的事情:

UIGraphicsBeginImageContextWithOptions(img2.size, NO, 0.0);
UIImage *img1 = UIGraphicsGetImageFromCurrentImageContext(); // transparent image
[anotherImg drawInRect:CGRectMake(0,0,img2.size.width,img2.size.height)];
UIImage *img3 = UIGraphicsGetImageFromCurrentImageContext(); // mask image with proper size
UIGraphicsEndImageContext();

当我在过滤器中使用anotherImage而不是img3作为遮罩时,输出图像的大小正确(img2在整个区域上绘制而不是1/3)但是遮罩较小(1/3的大小,而它应该是满的)区域)。情况正好相反。

我做错了什么?如何修复它,所以我在整个区域都绘制了图像和蒙版? 作为注释 - 我必须使用过滤器,cant draw with mask in cgcontext

1 个答案:

答案 0 :(得分:0)

你忘记了缩放到视网膜。这应该有所帮助:

UIGraphicsBeginImageContextWithOptions(img2.size, NO, img2.scale);