我试图掩盖用我的iPhone拍摄的照片。 Here我找到了一种方法。然而,要掩盖的图像显然需要一个alpha通道,而来自iPhone的图片则没有。 所以,我找到this主题讨论如何添加这样一个频道。不幸的是,该代码对我来说并不起作用(Xcode 6,iOS 7/8)
你们有谁知道怎么做到这一点?
提前致谢
答案 0 :(得分: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);
return [UIImage imageWithCGImage:masked];
}
最初它不起作用,因为我使用的蒙版图像是部分透明的。我重新创建了蒙版图像,确保整个图像都是黑色或白色并且有效。
我在另一个网站上找到了以下信息,这使我得出了这样的结论:
注意:蒙版图像不能具有任何透明度。代替, 透明区域必须是白色或黑色和白色之间的某种值。 像素越黑,它变得越不透明。
如果它与您用来从图像选择器加载图像的代码有关,这里是我用来加载图像和掩码的代码:
-(IBAction)selectImageFromCameraRoll:(UIButton *)sender
{
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
{
NSArray *media = [UIImagePickerController
availableMediaTypesForSourceType: UIImagePickerControllerSourceTypePhotoLibrary];
if ([media containsObject:(NSString*)kUTTypeImage] == YES) {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[picker setMediaTypes:[NSArray arrayWithObject:(NSString *)kUTTypeImage]];
picker.delegate = self;
[self presentViewController:picker animated:YES completion:nil];
}
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oops!"
message:@"This device does not have a photo library."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info valueForKey:UIImagePickerControllerMediaType];
if([mediaType isEqualToString:(NSString*)kUTTypeImage])
{
UIImage *photoTaken = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
self.imageView.image = [self maskImage:photoTaken withMask:[UIImage imageNamed:@"mask.png"]];
}
[picker dismissViewControllerAnimated:NO completion:nil];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:YES completion:nil];
}
这是我使用的蒙版图像的链接:
mask.png下载并重命名该文件。
答案 1 :(得分:0)
首先让我解释一下出了什么问题:
我认为 -
(UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage
UIImageView
。 所以我迷了好几次,拖着你进去。
我被困在那张无掩盖的图片上,我向谷歌发出了另一个查询,最后是以下内容:
这实际上回答了我的问题。
-(UIImage *)makeRoundedImage:(UIImage *) image radius: (float) radius;
方法返回带有alpha蒙版的被破坏图像。由于我需要一个完美的圆,我可以摆脱半径参数。
感谢您的所有想法和耐心。对于给您带来的不便,我深表歉意。