回答
在視頻設備上,對此問題的任何答案通常都不太準確。最簡單的例子就是投影儀。輸出分辨率例如是1024x768,但DPI因屏幕離投影機的距離而異。例如,WPF在視頻設備上始終採用96 DPI。
假設您仍然需要一個答案,無論準確性如何,並且您沒有Graphics對象,您可以使用某個P/Invoke從屏幕創建一個答案並從中獲取答案。
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(或者更準確地說,是當前的打印機設置)。
因此,鑑於我無法訪問Graphics對象,我該如何計算DPI? – AngryHacker 2009-01-23 22:43:36
解決DPI的方程,假設其餘的已知。 – falstro 2009-01-23 22:52:03
我如何知道顯示器的對角線長度?我的應用程序將在我無法控制的計算機上運行。 – AngryHacker 2009-01-23 23:00:43
您可以創建Graphics對象只需調用this.CreateGraphics()
(或更一般Control.CreateGraphics()
),然後你似乎知道使用DPIX和DpiY性能。請記住在創建它之後處理圖形對象(理想情況下使用Using語句)。
如果您不使用WinForms,請告訴我們它是什麼類型的應用程序。
- 1. 將英寸轉換爲釐米,反之亦然
- 2. 高度轉換 - 釐米到英尺和英寸(反之亦然)
- 3. 釐米轉換爲英尺和英寸,反之亦然不同的輸出?
- 4. 將ansi轉換爲utf8,反之亦然
- 5. 將float2轉換爲double2,反之亦然
- 6. 將lonlat轉換爲xyz,反之亦然
- 7. 將NSString轉換爲NSData,反之亦然
- 8. 將HTML轉換爲Xliff,反之亦然
- 9. 將JavaUtilDate轉換爲NSDate,反之亦然?
- 10. 將RSAPrivateKey轉換爲PrivateKey,反之亦然
- 11. 在C中將全角字符轉換爲hankaku,反之亦然#
- 12. 在c#中將Uint64轉換爲5字節,反之亦然#
- 13. 在C中將UNICODE_STRING轉換爲ANSI或反之亦然
- 14. 將對象轉換爲AS3中的XML元素(反之亦然)
- 15. 將像素偏移量轉換回值,反之亦然
- 16. 將字符串轉換爲數字,反之亦然C(NOT C++)
- 17. 將列轉換成行,反之亦然
- 18. DTO轉換爲實體,反之亦然
- 19. 將圖像轉換爲base64,反之亦然
- 20. 如何將CLOB轉換爲圖像或反之亦然?
- 21. 將圖像轉換爲矩陣,反之亦然?
- 22. C++ OpenCV:將mat轉換爲base64,反之亦然
- 23. C#將PDF文件轉換爲Word文檔,反之亦然
- 24. 我怎樣才能將Xml轉換爲Json,反之亦然c#
- 25. C++ |將int轉換爲byte [4],反之亦然
- 26. OpenCV將RGB轉換爲YCbCr,反之亦然手動(Visual C++)
- 27. 將數組數組轉換爲字節,反之亦然C#
- 28. 在Python中將base 6轉換爲decimal,反之亦然?
- 29. 在golang中將[] uint32轉換爲[]字節,反之亦然
- 30. 如何在Qt中將QVariant轉換爲QString,反之亦然?
DPI是什麼?屏幕?打印機? ...? – 2009-01-23 22:12:08