방법

2017-12-11 5 views
0

I는 VS 높이 따라 세로 또는 가로 모드에있을 수 QIMage있는 화상 데이터를 차단하지 및 유지 종횡비 가로 및 세로 방향을 가로 질러 QImage를 표시한다. 혹은 그 반대로도. 방법

나는 가로 세로 비율을 깨지 않고 세로 모드에서 가로 모드 & 풍경 QImage에 세로 QIMage에 맞게 노력하고 있어요. 다음

내가 이렇게 노력하고 있어요 방법입니다

Window { 
    id: app_window 
    visible: true 

    Rectangle { 
    id: my_image_view_container 
    width: my_image.sourceSize.width 
    height: my_image.sourceSize.height 

    // This is a Image item which has to host a portrait/landscape image.jpg in both portrait & landscape modes on an android device 
    Image { 
     id: my_image 
     anchors.fill: parent 
     // changes at runtime based on the image my app selects 
     source: "random/path/to/an/image.jpg" 
     scale: Qt.KeepAspectRatio 
    } 
    } 
} 

그것은 기본적으로 가로 세로 비율을 유지하기 위해 노력하고 있습니다. app_window 크기를 세로에서 가로로 조정하면 이미지가 비뚤어지지 않습니다.

문제 :
그러나 가로 모드에서
app_window의 높이 다음 이미지가 완전히 표시되지의 높이보다 my_image은 '경우.

질문 :해야 내가 어떤 모드에서 이미지의 일부를 볼 수없는하지뿐만 아니라 가로 세로 비율을 깨지 않고 모두 가로 & 세로 방향에서 image.jpg를 호스팅 달성 할 수 my_image_view_container & my_image의 크기를 설정하는 방법
?

PS :
과제는, 예를 들면 : I는 300 단위 높이 100 개 단위 너비 인 QImage를 생성 QML 스냅 & 걸릴. 이제 모바일 장치의 방향을 바꾸거나 바탕 화면의 창 크기를 가로로 조정하십시오. 이제 300 단위 높이의 QIMage를 100 단위 높이에 맞추어야합니다. 이걸 잘 수행하려면 폭을 & 높이로 설정하는 방법? 가로 모드 &에서 초상화 캡처 이미지를 볼 때 안드로이드의 Google 포토가 이미지의 양쪽 옆면에 검은 색을 포함시켜 멋지게 볼 수 있습니다. Google 포토의이 기능을 정확하게 구현하고 싶습니다. 이미지 QML 요소의 높이가 올바른 너비 &으로 설정되어야합니까?

답변

0

경우에 따라 바인딩을 사용하여 현재 픽셀 밀도 및 화면 상태에 따라 다른 이미지를 선택할 수 있습니다. 공식 문서에 따르면

바인딩을 사용하면 다른 개체의 속성 변경이나 외부 이벤트 발생에 따라 개체에서 해당 속성을 자동으로 업데이트 할 수 있습니다.

현대 Qt에서 Scalability에 대한 문서를 확인하십시오. 그렇게 생각하면 도움이 될 것 같습니다. 당신은 쉽게 폭 & 높이를 비교하여, 화면, 가로 또는 세로 상황의 현재 상태를 확인할 수 있습니다 : 귀하의 경우

parameter: width > height ? contition_1 : condition_2 

, 나는 상태의 따라 2 개 개의 다른 이미지를 가지고하는 것이 좋습니다 것입니다. 공식 문서에서 바인딩을 위해 원하는 작업을 수행하는 것을 목표로하는 Orientation Observer을 찾을 수 있습니다.그건 그렇고, 당신은 이런 식으로 뭔가를 할 수 : 동일한 이미지를 사용하려는 경우

Image { 
    source: { 
     if (width > height) 
     "image_1.png" 
     else 
     "image_2.png" 
    } 
} 

[업데이트]

다른 방법으로, 당신은 Screen 클래스의 속성 방향을 처리 할 수 ​​있습니다. 속성 너비, 높이, Screen.width로 이미지 크기를 맞출 경우 & Screen.height 속성으로 충분해야합니다. 맞춤 코드를 사용하려는 경우 다음을 따르십시오.

Image { 
    id: image 
    source: "image.jpg" 
    width: whatever 
    height: whatever 
    fillMode: Image.PreserveAspectFit 
    anchors.top: parent.top 

    Screen.onOrientationChanged: { 
     if (Screen.primaryOrientation === Qt.PortraitOrientation) { 
      image.width = 300; 
      image.heigh = 100; 
     } else { 
      image.width = 100; 
      image.heigh = 300; 
     } 
    } 
} 
+0

방향에 따라 다른 이미지가 표시되지 않습니다. 당신의 답을 참고로, 나는 다른 케이스가 일치하는 경우'image_1.png' 크기를 조정해야합니다. 다른 이미지 인 'image_2.png'을 표시하지 않음 –

+0

[Qt Scalability] (http://doc.qt.io/qt-5/scalability.html)는 'hdpi'또는 ' 'Screen.PixelDensity'를 기반으로 한 ldpi 이미지입니다. 제 경우는 풍경 모드에서 ** 초상화 QImage ** 또는 초상화 모드에서 ** 풍경 QImage를 표시 할 수있는 매우 간단한 경우 ** –

+0

이것은 내가 찾던 것이 아닙니다. 화면이 가로에서 세로로 바뀌면 그 반대의 경우도 있습니다. ** 도전 과제 : ** 예를 들어 스냅 샷을 찍고 300 단위 높이에 100 단위 폭의 QImage를 생성했다고 가정 해보십시오. 이제 방향을 가로 방향으로 변경하십시오. 300 단위 높이의 QIMage를 100 단위 높이에 맞추어야합니다. 이 작업을 수행하는 방법? –