[Interest] QML Camera: resulting image is rotated

ekke ekke at ekkes-corner.org
Mon Dec 10 09:36:57 CET 2018


Am 10.12.18 um 02:08 schrieb Alexander Ivash:
> Thanks!
>
> But frankly speaking this is not the answer I hoped to get :).
;-)
> Have you tried to extract rotation from exif / metadata? This is what
> I'm going to do if don't find better way.
have not tried this. please let me know if you'll find a way
> In my case VideoOutput always shows preview in correct orientation,

have you tested on iOS and FrontFace Camera ? in my use-cases I needed
rotation of 180 for preview (VideoOutput)

> so looks like Qt /knows/ how to rotate preview frames properly (why
> doesn't it use this knowledge to rotate saved image or why doesn't it
> expose it - this is another question). But if Qt knows - there should
> be some source of information where it gets such a knowledge.

haven't found any info about

ciao

ekke

>
> Regards, Alexander
>
> On Dec 9 2018, at 8:17 pm, ekke <ekke at ekkes-corner.org> wrote:
>
>
>     Am 09.12.18 um 16:57 schrieb Alexander Ivash:
>
>
>         Is it possible to understand the angle to un-rotate? I've
>         tried to un-rotate based on orientation from VideoOtput but it
>         doesn't work uniformly on all the devices.
>
>         Regards, Alexander
>         Open Tracking
>
>         |
>
>         _______________________________________________
>         Interest mailing list
>         Interest at lists.qt-project.org <https://link.getmailspring.com/link/1544403647.local-a741a368-81fb-v1.5.3-420ce003@getmailspring.com/0?redirect=mailto%3AInterest%40lists.qt-project.org&recipient=ZWtrZUBla2tlcy1jb3JuZXIub3Jn>https://lists.qt-project.org/listinfo/interest <https://link.getmailspring.com/link/1544403647.local-a741a368-81fb-v1.5.3-420ce003@getmailspring.com/1?redirect=https%3A%2F%2Flists.qt-project.org%2Flistinfo%2Finterest&recipient=ZWtrZUBla2tlcy1jb3JuZXIub3Jn>
>
>         |
>
>     Alexander,
>
>     from my experiences it's not so easy.
>
>     it depends from device and how the camera module is physically mounted
>
>     so I'm doing it for my customers hardcoded while waiting that QML
>     will handle this
>
>     here's some code from customer app
>
>     it's on my TODO to extract the code and create example app and
>     blog and create all the specific issues - but expect 2019
>
>     To get some ideas:
>
>     // V I D E O   O U T P U T
>     VideoOutput {
>         source: camera
>         anchors.fill: parent
>         focus : visible
>         autoOrientation: true
>         rotation: isIos && isFrontFace ? 180:0
>     } // Video Output
>
>
>     // P R E V I E W   I M A G E
>     Image {
>         id: photoPreview
>         fillMode: Image.PreserveAspectFit
>          anchors.fill: parent
>          property bool isPortraitAtCaptureTime: false
>         // i O S   BUG
>         // on iOS we don't use autoTransform - otherwise orientation
>     would be wrong
>         // instead we're calculating rotation of Image
>         // we also must calculate rotation 180 for VideoOutput if iOS
>     and FrontFace
>        // see also
>        // https://bugreports.qt.io/browse/QTBUG-50056
>     <https://link.getmailspring.com/link/1544403647.local-a741a368-81fb-v1.5.3-420ce003@getmailspring.com/2?redirect=https%3A%2F%2Fbugreports.qt.io%2Fbrowse%2FQTBUG-50056&recipient=ZWtrZUBla2tlcy1jb3JuZXIub3Jn>
>        // test also front camera bugs
>     https://bugreports.qt.io/browse/QTBUG-37955
>     <https://link.getmailspring.com/link/1544403647.local-a741a368-81fb-v1.5.3-420ce003@getmailspring.com/3?redirect=https%3A%2F%2Fbugreports.qt.io%2Fbrowse%2FQTBUG-37955&recipient=ZWtrZUBla2tlcy1jb3JuZXIub3Jn>
>     and https://bugreports.qt.io/browse/QTBUG-67985
>     <https://link.getmailspring.com/link/1544403647.local-a741a368-81fb-v1.5.3-420ce003@getmailspring.com/4?redirect=https%3A%2F%2Fbugreports.qt.io%2Fbrowse%2FQTBUG-67985&recipient=ZWtrZUBla2tlcy1jb3JuZXIub3Jn>
>        autoTransform: isIos? false : true
>        rotation: 0
>      } // photoPreview
>
>     // ROTATE BEFORE CAPTURE
>     // iOS rotation calculated in cpp:
>     int PhotoUtil::cameraScreenRotation(const bool isBackFace, const
>     int cameraOrientation)
>     {
>         const int screenAngle =
>     mScreen->angleBetween(mScreen->nativeOrientation(),
>     mScreen->orientation());
>         int rotation;
>         if (isBackFace) {
>             rotation = (360 - cameraOrientation + screenAngle) % 360;
>         } else {
>             rotation = (cameraOrientation - screenAngle) % 360;
>         }
>         return rotation;
>     }
>     if(isIos) {
>        
>     photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>     requestId, theEntity, photoPreview.rotation)
>     } else {
>         // X C O V E R
>         if(isSamsungXCover) {
>             if(photoPreview.isPortraitAtCaptureTime) {
>                 if(isBackFace) {
>                     // PORTRAIT BACK: rotate 90°
>                    
>     photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>     requestId, theEntity, 90)
>                 } else {
>                     // PORTRAIT FRONT: rotate -90°
>                    
>     photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>     requestId, theEntity, -90)
>                 }
>             } else {
>                 // LANDSCAPE BACK or FRONT: rotate 180°
>                
>     photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>     requestId, theEntity, 180)
>             }
>         }
>         // P I X E L    C
>         else if(isPixelC) {
>             if(photoPreview.isPortraitAtCaptureTime) {
>                 if(isBackFace) {
>                     // PORTRAIT BACK: rotate 90°
>                    
>     photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>     requestId, theEntity, 90)
>                 } else {
>                     // PORTRAIT FRONT: rotate -90°
>                    
>     photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>     requestId, theEntity, -90)
>                 }
>             } else {
>                 // LANDSCAPE BACK or FRONT: OK
>                
>     photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>     requestId, theEntity, 0)
>             }
>         }
>         // NO SPECIAL DEVICE WITH MANAGED ORIENTATION
>         else {
>            
>     photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>     requestId, theEntity, 0)
>         }
>     }
>
>     have tried with some devices and also created a Settings Page
>     where customer can enter rotation needed for FrontFace or BackFace
>     camera for a specific model, so I can add this
>
>     ekke
>     _______________________________________________
>     Interest mailing list
>     Interest at lists.qt-project.org
>     https://lists.qt-project.org/listinfo/interest
>
> Open Tracking 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20181210/946f67f0/attachment.html>


More information about the Interest mailing list