6

我想通过将另一个图像作为掩码传递来掩盖一个图像。我可以屏蔽图像,但生成的图像看起来不太好。它在边界处呈锯齿状。

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

  1. 我要遮罩的图像的比例值为 1。该图像的分辨率通常大于 1000x1000 像素。
  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;
}

如何获得遵循视网膜比例的蒙版图像?

4

2 回答 2

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();

我工作得很好。

编辑

或者

UIImage * maskedImage = [UIImage imageWithCGImage:masked 
                                            scale:[[UIScreen mainScreen] scale] 
                                      orientation:UIImageOrientationUp];
于 2014-01-08T13:49:47.450 回答
5

你可以做

UIImage * maskedImage = [UIImage imageWithCGImage:masked scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp];
于 2014-02-01T10:26:24.307 回答