【问题标题】:iOS how to adjust image and mask (either image or mask anyone too zoom in to adjust not both at sametime )iOS如何调整图像和蒙版(图像或蒙版任何人都放大无法同时调整两者)
【发布时间】:2014-05-30 15:11:52
【问题描述】:

我正在做一个应用程序,我将从相机或相机胶卷中拍摄照片并使用蒙版图像进行蒙版,但我如何调整图像或蒙版?我尝试使用滚动视图进行放大和缩小以及捏合手势?

- (void)viewDidLoad
{
    [super viewDidLoad];

    // for zoomin
    [self.imageview setImage:imageView.image];
    [self.scrollView setMaximumZoomScale:5.0f];
    [self.scrollView setClipsToBounds:YES];


    // for drag
    UIPinchGestureRecognizer *pinch=[[UIPinchGestureRecognizer alloc]initWithTarget:self     action:@selector(pinched:)];
    [self.imageview addGestureRecognizer:pinch];

}


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.imageview;
}

- (void)pinched:(UIPinchGestureRecognizer *)sender {
    if (sender.scale >1.0f && sender.scale < 2.5f) {
        CGAffineTransform transform = CGAffineTransformMakeScale(sender.scale, sender.scale);
        imageView.transform = transform;
     }
 }

-(IBAction)camera:(id)sender {
    picker = [[UIImagePickerController alloc]init];
    picker.delegate = self;

    [picker setSourceType:(UIImagePickerControllerSourceTypeCamera)];
    [self presentViewController:picker1 animated:YES completion:NULL];
}

- (void)imagePickerController:(UIImagePickerController *)photoPicker     didFinishPickingMediaWithInfo:(NSDictionary *)info {

    img = [info valueForKey:UIImagePickerControllerOriginalImage];
    [self.imageview setImage:img];
    [self dismissViewControllerAnimated:YES completion:NULL];
}

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [picker dismissViewControllerAnimated:YES completion:NULL];
}
  - (UIImage*) maskImage:(UIImage *) image withMask:(UIImage *) mask
{
CGImageRef imageReference = image.CGImage;
CGImageRef maskReference = mask.CGImage;

CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskReference),
                                         CGImageGetHeight(maskReference),
                                         CGImageGetBitsPerComponent(maskReference),
                                         CGImageGetBitsPerPixel(maskReference),
                                         CGImageGetBytesPerRow(maskReference),
                                         CGImageGetDataProvider(maskReference),
                                         NULL, // Decode is null
                                         YES // Should interpolate
                                         );

CGImageRef maskedReference = CGImageCreateWithMask(imageReference, imageMask);
CGImageRelease(imageMask);

UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference];
CGImageRelease(maskedReference);

return maskedImage;

}

- (IBAction)mask:(id)sender {

    self.imageview.image = [self maskImage:img withMask:[UIImage imageNamed:@"18.jpg"]];
    [sender addTarget:self
               action:@selector(maskButtonClicked:)
     forControlEvents:UIControlEventTouchUpInside];
}

【问题讨论】:

  • 您需要提供您的maskImage:WithMask: 方法。问题很可能就在那里。
  • 阅读我上面的评论,如果没有看到有问题的代码,我们将无法帮助您。
  • 我做到了,你可以检查我上面的代码

标签: ios objective-c uiimageview mask


【解决方案1】:

在与CGImageRef 相互转换时,您会丢失方向数据。

用这个代替imageWithCGImage:

[UIImage imageWithCGImage:maskedReference scale:image.scale orientation:image.imageOrientation];

编辑

蒙版也忽略了图像方向,因此最简单的方法可能只是在对图像方向进行任何操作之前对其进行规范化。 See this answer for more details.

在你得到图像之后,在你开始屏蔽它之前,用这个来固定它的方向:

- (UIImage *)normalizedImage:(UIImage *)inputImage 
{
    if (inputImage.imageOrientation == UIImageOrientationUp) return inputImage; 

    UIGraphicsBeginImageContextWithOptions(inputImage.size, NO, inputImage.scale);
    [inputImage drawInRect:(CGRect){0, 0, inputImage.size}];
    UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return normalizedImage;
}

【讨论】:

  • 现在蒙版进入横向模式,图像越来越好了,
  • 努力无法修复:(
  • 以上代码没有考虑大小..如果有人知道请帮助我,我仍在尝试
  • @user3649307 我编辑了我的答案。这只是一个错字。
  • 还是同样的问题,无论是图像还是蒙版在更改代码时得到风景,,
猜你喜欢
  • 2020-09-23
  • 1970-01-01
  • 2023-03-19
  • 2020-12-21
  • 1970-01-01
  • 2020-04-20
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多