Проблема с ориентацией изображения, снятого в ландшафтном режиме с помощью GPUImageStillCamera

Я разрабатываю приложение, в котором я снимаю изображение в альбомной ориентации, когда ориентация устройства выключена. я использую GPUImageStillCamera для захвата изображения. Но я получаю проблему в поворот изображения. Проблема в том, что когда я снимаю изображение в альбомном режиме с выключенным устройством и сохраняю его в галерее, то при включении устройства поворачивается, и изображение должно вращаться с ориентацией устройства. Но изображение находится в альбомной ориентации, когда устройство удерживается в портретном режиме, и если устройство удерживается в альбомной ориентации, изображение вращается с UpsideDown .

Заметка

Поворот изображения работает идеально, если захват сделан при включенном устройстве. Проблема только с изображением в ландшафтном режиме, когда устройство выключено. Я перепробовал много решений, подобных этому. Но у меня не сработало.

Любая помощь будет оценена. Спасибо

1 ответ

Решение

Я получил решение этой проблемы. Я пытался обнаружить accelerometer's вращение, чтобы получить вращение, даже когда ориентация устройства OFF, добавлять CoreMotion.framerwork к вашему проекту. Затем импортировать CMMotionManager.h в вашем viewController, В viewDidLoadдобавьте следующий код:

self.motionManager = [[CMMotionManager alloc] init];
    self.motionManager.accelerometerUpdateInterval = 1;

    if ([self.motionManager isAccelerometerAvailable])
    {
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        [self.motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
            dispatch_async(dispatch_get_main_queue(), ^{

                float xx = -accelerometerData.acceleration.x;
                float yy = accelerometerData.acceleration.y;
                float angle = atan2(yy, xx);

                // could fire a custom shouldAutorotateToInterfaceOrientation-event here.
                if(angle >= -2.25 && angle <= -0.75)
                {
                    if(_deviceOrientation != UIInterfaceOrientationPortrait)
                    {
                        _deviceOrientation = UIInterfaceOrientationPortrait;
                    }
                }
                else if(angle >= -0.75 && angle <= 0.75)
                {
                    if(_deviceOrientation != UIInterfaceOrientationLandscapeRight)
                    {
                        _deviceOrientation = UIInterfaceOrientationLandscapeRight;
                    }
                }
                else if(angle >= 0.75 && angle <= 2.25)
                {
                    if(_deviceOrientation != UIInterfaceOrientationPortraitUpsideDown)
                    {
                        _deviceOrientation = UIInterfaceOrientationPortraitUpsideDown;
                    }
                }
                else if(angle <= -2.25 || angle >= 2.25)
                {
                    if(_deviceOrientation != UIInterfaceOrientationLandscapeLeft)
                    {
                        _deviceOrientation = UIInterfaceOrientationLandscapeLeft;
                    }
                }
            });
        }];
    } else
        NSLog(@"not active");
Другие вопросы по тегам