IOS:屏蔽保持视网膜比例因子的图像

时间:2013-07-03 12:33:17

标签: ios uiimage core-graphics cgimage

我想通过传递另一个图像作为蒙版来掩盖图像。我能够掩盖图像,但生成的图像看起来不太好。它在边界处是锯齿状的。

我猜这个问题与视网膜图形有关。两个图像的scale属性不同:

  1. 我要屏蔽的图像具有比例值1.此图像的分辨率通常大于1000x1000像素。
  2. 我希望得到的图像(仅具有黑白颜色的图像)的图像具有比例值2.该图像通常具有300×300像素的分辨率。
  3. 生成的图像的比例值为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;
    }
    

    如何获得跟随视网膜尺度的蒙面图像?

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:5)

你可以做到

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