Gau*_*ngh 6 core-graphics uiimage cgimage ios
我想通过传递另一个图像作为掩码来掩盖图像.我能够掩盖图像,但生成的图像看起来不太好.它在边界处是锯齿状的.
我猜这个问题与视网膜图形有关.两个图像的比例属性不同:
生成的图像的比例值为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;
}
Run Code Online (Sandbox Code Playgroud)
如何获得跟随视网膜尺度的蒙面图像?
我遇到过同样的问题.看来这条线忽略了比例因子.
UIImage *maskedImage = [UIImage imageWithCGImage:masked];
Run Code Online (Sandbox Code Playgroud)
所以你应该自己画图像.替换为以下内容:
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();
Run Code Online (Sandbox Code Playgroud)
我工作得很好.
编辑
要么
UIImage * maskedImage = [UIImage imageWithCGImage:masked
scale:[[UIScreen mainScreen] scale]
orientation:UIImageOrientationUp];
Run Code Online (Sandbox Code Playgroud)
小智 5
你可以做
UIImage * maskedImage = [UIImage imageWithCGImage:masked scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp];
Run Code Online (Sandbox Code Playgroud)