2014-07-24 4 views
2

WPF 설명서 및 자습서에서는 WPF가 다른 해상도 (1600x1200 -> 네이티브 및 1024x768) 및/또는 DPI 설정에서 동일한 크기의 창을 보여주는 것으로 이해했음을 알 수 있습니다. 그러나 샘플 앱을 사용해 보았습니다. 해상도가 다른 경우 크기가 다릅니다. 그물에서 나는 다른 컴퓨터에서 같은 창 크기를보기 위해 "네이티브 해상도"를 사용하는 http://www.wpflearningexperience.com/?p=41을 찾았지만 기본 개념을 이해할 수 없었습니다.Wpf 해상도 무결점 및 기본 해상도

왜 LCD의 기본 해상도가 중요하고 해상도의 독립성이 DPI 독립성 대신 용어입니까? 아마, 잘 모르겠다/용어를 잘 사용하지만,이 문제를 이해하기 위해서는 설명이 필요합니다.

답변

0

나는 내 자신의 질문에 답하고 싶지 않지만, 나는 그 점을 알고 있다고 생각합니다. 이 조숙 한 질문에 대해 유감스럽게 생각하지만 잠시 후 나는 문제를 알아 차렸다.

필자가 알기 론 WPF는 Windows 데스크톱 설정을 통해 변경하는 시스템 DPI를 배율 인수로 사용합니다. 예를 들어 위의 튜토리얼에서 컴퓨터 중 하나는 기본 해상도가 1600x1200이고 96 DPI입니다 (실제로는 튜토리얼에서 설명한대로 94). 시스템 DPI (96)가 실제 DPI (94)에 매우 근접하고 WPF가이 정보를 사용하여 창 크기를 조정할 수 있기 때문에 모든 것이 잘됩니다.

디바이스 독립적 단위는 1/96 인치이며 실제 픽셀 크기 (화면의 물리적 픽셀)에 1과 같은 ((1/96) * 96)가 곱 해져서 알 수 있습니다. 300 DIU의 창을 가지고 있다면 화면에 (300/96) 인치가 보일 것입니다.

그러나 시스템 DPI를 변경하지 않고 해상도를 변경하면 내 마음을 혼란스럽게하는 문제가 발생합니다. 시스템 DPI (여전히 96 임)를 변경하지 않고 화면 해상도를 1024x768로 설정하고 응용 프로그램을 다시 실행하면 더 큰 창이 보입니다. 이것은 틀린 시스템 DPI와 WPF의 당연히 잘못된 스케일 인자의 요구입니다. WPF는 실제 DPI에 대해 많이 알지 못하며 시스템 DPI 인 정보 만 사용합니다. 이 새로운 설정으로 창 크기를 다시 계산해 보겠습니다. 먼저 ((1/96) * 96)이 1 인 스케일 인자가 필요합니다. 우리는 1 논리 픽셀도 화면상의 1 물리 픽셀이라고 말할 수 있습니다. 그러나 우리는 해상도를 변경했으며 300 픽셀은 이전 해상도와 동일하지 않습니다. 이전에는 길이가 17 인치 인 대각선에 1600 개의 픽셀이 있습니다. 그러나 우리는 17 인치 용 1024 픽셀을 가지고 있습니다. 300 픽셀은 새 해상도 (1024x768)에서 거의 5 인치이지만 이전 해상도 (1600x1200)에서는 3.18 인치입니다. 따라서 WPF는 잘못된 DPI 값으로 인해 해상도가 독립적 일 수 없으며 새 해상도로 더 큰 창을 그립니다.

그래서 문제를 어떻게 해결할 수 있습니까? (제 말은 이것이 절대적인 해결책이라고 주장하지 않습니다)! 해상도를 변경할 때 DPI 값도 변경되었는데이 DPI 값은이 새로운 해상도에 적용됩니다. 예를 들어, 내 모니터의 경우 대각선 크기가 17 인치이고 해상도는 1024x768입니다. 공식 (1024 픽셀/17 인치)을 사용하면 새로운 DPI가 거의 60 DPI입니다. 필자는 시스템 DPI를 60으로 설정하고 (데스크탑 설정을 통해) 물론 작동합니다. 계산 중 반올림 오류로 인해 완벽하지는 않지만 실제로는 값이 동일하다고 볼 수 있습니다.

WPF는 해상도에 독립적이므로 시스템 DPI를 사용하며 실제 DPI (현재 해상도의 실제 DPI 값)를 설정해야합니다. WPF가 자유롭게 해결할 수 있도록 DPI를 설정해야합니다. 마지막으로 Windows XP에서 한 가지 더 많은 작업을 수행 했으므로 새 값으로 DPI 설정을 사용하려면 다시 시작해야합니다. 만약 당신이 (내가했던 것처럼), WPF 여전히 계산을 잘못 만들고 다른 크기로 그립니다.

위의 테스트 결과는 내 이해와 결과입니다.하지만 절대적이라고 주장 할 수는 없습니다. 이 정보를 유용하게 사용할 수있는 사람들과 공유하고 싶습니다.오류가 있거나 개선이 필요하다고 생각되면 내 게시물을 댓글 달기/편집하십시오.