我想通过传递另一个图像作为掩码来掩盖图像.我能够掩盖图像,但生成的图像看起来不太好.它在边界处是锯齿状的.
我猜这个问题与视网膜图形有关.两个图像的比例属性不同:
>我要屏蔽的图像具有比例值1.此图像的分辨率通常大于1000×1000像素.
>我希望得到的图像(仅具有黑白颜色的图像)的图像具有比例值2.该图像通常具有300×300像素的分辨率.
生成的图像的比例值为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; }
如何获得跟随视网膜尺度的蒙面图像?
解决方法
我遇到过同样的问题.看来这条线忽略了比例因子.
UIImage *maskedImage = [UIImage imageWithCGImage:masked];
所以你应该自己画图像.替换为以下内容:
UIGraphicsBeginImageContextWithOptions(image.size,NO,0.0); CGContextRef context = UIGraphicsGetCurrentContext(); CGRect rect = CGRectMake(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];