문제

픽스를 인치로 변환하고 그 반대도 마찬가지입니다. 나는 DPI가 필요하다는 것을 이해하지만이 정보를 얻는 방법을 잘 모르겠습니다 (예 : 나는 Graphics 객체, 그래서 그것은 옵션이 아닙니다).

방법이 있습니까?

도움이 되었습니까?

해결책

비디오 장치 에서이 질문에 대한 모든 답변은 일반적으로 정확하지 않습니다. 이것이 왜 그런지 확인하는 데 사용하기 가장 쉬운 예는 프로젝터입니다. 출력 분해능은 1024x768이지만 DPI는 화면이 프로젝터 apeture에서 얼마나 멀리 떨어져 있는지에 따라 다릅니다. 예를 들어 WPF는 항상 비디오 장치에서 96 DPI를 가정합니다.

정확도에 관계없이 여전히 답이 필요하다고 가정하고 그래픽 객체가 없으므로 일부 P/호출로 화면에서 하나를 만들 수 있으며 답을 얻을 수 있습니다.

Single xDpi, yDpi;

IntPtr dc = GetDC(IntPtr.Zero);

using(Graphics g = Graphics.FromHdc(dc))
{
    xDpi = g.DpiX;
    yDpi = g.DpiY;
}

if (ReleaseDC(IntPtr.Zero) != 0)
{
    // GetLastError and handle...
}


[DllImport("user32.dll")]
private static extern IntPtr GetDC(IntPtr hwnd);    
[DllImport("user32.dll")]
private static extern Int32 ReleaseDC(IntPtr hwnd);

다른 팁

DPI를 모르면 육체적으로 실제 방법이 없습니다. 픽셀은 개별적이지 않으며 인치는 모니터에서 인치를 말하는 경우 DPI를 계산하기 위해 해상도 (및 픽셀 종횡비) 및 가시 모니터 영역의 크기를 (최소한) 알아야합니다. . 해상도는 일반적으로 어딘가에 가져올 수 있습니다 (C# 또는 .NET 프로그래머가 아니므로 도와 드릴 수 없습니다). 그러나 모니터의 크기는 일반적으로 사용할 수 없습니다. 추정치가 충분히 좋으면 사용자가 모니터 크기 (예 : 21 "또는 무엇이든)를 입력하고 DPI를 해결하도록하십시오.

(resX/DPI)^2 + (resY/DPI)^2 = screenDiagonal^2

주는 (대각선과 해상도를 알고 있다고 가정)

DPI = sqrt(resX^2+resY^2)/screenDiagonal

모니터가 정확히 21 "(.. 또는 무엇이든)이 아니기 때문에 이것은 추정치 일뿐입니다. 픽셀 종횡비는 정확히 1 : 1입니다.

종이에 인치를 말하는 경우 자연스럽게 프린터의 DPI (또는보다 정확하게는 현재 프린터 설정)를 알아야합니다.

전화를 통해 그래픽 객체를 만들 수 있습니다 this.CreateGraphics() (또는 더 일반적으로 Control.CreateGraphics()) 그런 다음 알고있는 것처럼 DPIX 및 DPIY 속성을 사용하십시오. 그래픽 객체를 작성한 후 처분하는 것을 잊지 마십시오 (이상적으로 사용 설명서와 함께).

WinForms를 사용하지 않는 경우 어떤 종류의 응용 프로그램인지 알려주십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top