【问题标题】:Image auto-rotates after using CIFilter使用 CIFilter 后图像自动旋转
【发布时间】:2014-09-10 01:56:01
【问题描述】:

我正在编写一个应用程序,让用户可以拍照然后对其进行编辑。我正在使用 UISliders 实现亮度/对比度/饱和度的工具,并且正在使用 Core Image Filter 类来执行此操作。当我打开应用程序时,我可以拍照并正确显示。但是,如果我选择编辑图片,然后使用任何描述的滑块工具,图像将逆时针旋转 90 度。这是有问题的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.navigationItem.hidesBackButton = YES; //hide default nav

    //get image to display
    DBConnector *dbconnector = [[DBConnector alloc] init];
    album.moments = [dbconnector getMomentsForAlbum:album.title];
    Moment *mmt = [album.moments firstObject];
    _imageView.image = [mmt.moment firstObject];

    CGImageRef aCGImage = _imageView.image.CGImage;
    CIImage *aCIImage = [CIImage imageWithCGImage:aCGImage];
    _editor = [CIFilter filterWithName:@"CIColorControls" keysAndValues:@"inputImage", aCIImage, nil];

    _context = [CIContext contextWithOptions: nil];
    [self startEditControllerFromViewController:self];

}

//cancel and finish buttons
- (BOOL) startEditControllerFromViewController: (UIViewController*) controller {

    [_cancelEdit addTarget:self action:@selector(cancelEdit:) forControlEvents:UIControlEventTouchUpInside];
    [_finishEdit addTarget:self action:@selector(finishEdit:) forControlEvents:UIControlEventTouchUpInside];

    return YES;
}

//adjust brightness
- (IBAction)brightnessSlider:(UISlider *)sender {

    [_editor setValue:[NSNumber numberWithFloat:_brightnessSlider.value] forKey: @"inputBrightness"];

    CGImageRef cgiimg = [_context createCGImage:_editor.outputImage fromRect:_editor.outputImage.extent];
    _imageView.image = [UIImage imageWithCGImage: cgiimg];
    CGImageRelease(cgiimg);
}

我相信问题源于brightnessSlider 方法,基于我放置的断点。有没有办法阻止我的照片自动旋转?如果没有,如何将其旋转回正常方向?

【问题讨论】:

    标签: ios uiimage uislider core-image cifilter


    【解决方案1】:

    发布后仅仅几分钟,我就找到了自己问题的答案。去搞清楚。无论如何,我只是将滑块方法更改为以下内容:

    - (IBAction)brightnessSlider:(UISlider *)sender {
    
        [_editor setValue:[NSNumber numberWithFloat:_brightnessSlider.value] forKey: @"inputBrightness"];
    
        CGImageRef cgiimg = [_context createCGImage:_editor.outputImage fromRect:_editor.outputImage.extent];
        UIImageOrientation originalOrientation = _imageView.image.imageOrientation;
        CGFloat originalScale = _imageView.image.scale;
    
        _imageView.image = [UIImage imageWithCGImage: cgiimg scale:originalScale orientation:originalOrientation];
        CGImageRelease(cgiimg);
    
    }
    

    这只是记录图像的原始方向和比例,并在数据转换回 UIImage 时重新设置它们。希望这对其他人有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      相关资源
      最近更新 更多