2013-07-03 44 views
6

我想通过传递另一个图像作为蒙版来掩盖图像。我能够掩盖图像,但生成的图像看起来不太好。它边界交错。IOS:屏蔽图像保持视网膜比例因子帐户

我猜这个问题与视网膜图形有关。对两个图像中的刻度属性是不同的,因为:

  1. 从中我要掩蔽的图像具有刻度值1。这通常图像的分辨率高于1000×1000个像素大。
  2. 根据我希望得到的图像(只有黑白颜色的图像)的图像的比例值为2.此图像的分辨率一般为300x300像素。

产生的图像具有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); 
CGImageRelease(mask); 
UIImage *maskedImage = [UIImage imageWithCGImage:masked ]; 
CGImageRelease(masked); 
return maskedImage; 
} 

我怎样才能得到它遵循视网膜规模遮盖的图像?

+0

你应该考虑验证的答案,如果它帮助你。 – kokluch

+0

我在2013年7月3日提出这个问题,第一个答案是1月8日。在那段时间,我已经转移到不同的项目,我还没有检查答案是否有帮助,如果我不确定,我该如何接受任何答案。我只想关闭这个问题,但不知道该怎么做。 –

+0

不难找到... – kokluch

回答

5

我有同样的问题。看起来这条线忽略比例因子。

UIImage *maskedImage = [UIImage imageWithCGImage:masked]; 

因此,您应该自己绘制图像。将其替换为以下内容:

UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0); 

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); 

CGContextDrawImage(context, rect, masked); 

UIImage * maskedImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

对我很好。

编辑

OR

UIImage * maskedImage = [UIImage imageWithCGImage:masked 
              scale:[[UIScreen mainScreen] scale] 
             orientation:UIImageOrientationUp]; 
4

你可以做

UIImage * maskedImage = [UIImage imageWithCGImage:masked scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp];