Đối với kích thước hiển thị, bạn sẽ muốn Screen
.PrimaryScreen.Bounds.Size
(hoặc Screen.GetBounds(myform)
).
Nếu bạn muốn DPI, sử dụng DpiX và DpiY thuộc tính của Graphics:
PointF dpi = PointF.Empty;
using(Graphics g = this.CreateGraphics()){
dpi.X = g.DpiX;
dpi.Y = g.DpiY;
}
Oh, chờ đợi! Bạn muốn thực tế, giữ một người cai trị lên đến màn hình và đo lường, kích thước ?! Không. Không thể sử dụng mọi dịch vụ OS. Hệ điều hành không biết kích thước thực tế của màn hình hoặc cách người dùng đã hiệu chỉnh nó. Một số thông tin này được phát hiện về mặt lý thuyết, nhưng nó không đủ quyết định để hệ điều hành sử dụng nó một cách đáng tin cậy, vì vậy nó không có.
Là một công việc xung quanh, bạn có thể thử một vài điều.
- Bạn có thể thử truy vấn chuỗi hiển thị của thiết bị màn hình đã cài đặt (Tôi không chắc chắn cách thực hiện) và xem bạn có thể phân tích kích thước hợp lý không. Ví dụ, màn hình có thể là "ValueBin E17p" và bạn có thể suy đoán rằng đó là màn hình 17 "từ đó. Tất nhiên, chuỗi hiển thị này có thể là" Màn hình Plug and Play ". lúc tốt nhất.
- bạn có thể hỏi người dùng những gì màn hình kích thước mà họ có. lẽ họ sẽ biết.
Một khi bạn biết (hoặc nghĩ bạn biết) kích thước đường chéo của màn hình, bạn cần phải tìm tỷ lệ khung hình vật lý của nó.Một lần nữa, một vài điều:
- Giả sử tỷ lệ cỡ ảnh pixel hiện tại phù hợp với tỷ lệ khung hình vật lý của màn hình. Điều này giả định rằng (A) người dùng đã chọn độ phân giải lý tưởng cho màn hình của họ và (B) màn hình có pixel vuông. Tôi không biết một màn hình máy tính theo định hướng người tiêu dùng hiện tại không có pixel vuông, nhưng những cái cũ hơn và những cái mới hơn có thể.
- Hỏi người dùng. Có thể họ sẽ biết.
Khi bạn biết (hoặc nghĩ bạn biết) kích thước đường chéo và tỉ lệ khung hình của màn hình là gì, bạn có thể tính chiều rộng và chiều cao vật lý của màn hình. Một + B = C , do đó, một vài tính toán sẽ đưa nó cho bạn tốt:
Nếu bạn phát hiện ra rằng đó là một 17" màn hình, và độ phân giải hiện tại của nó là 1280 x 1024:
+ 1024 = 2686976
Sqrt (2686976) = 1639,1998047828092637409837247032
17" * 1280/1639,2 = 13,274768179599804782820888238165"
17" * 10 24/1639.2 = 10.619814543679843826256710590532 "
Điều này đặt chiều rộng vật lý là 13,27" và chiều cao vật lý là 10,62 ". Điều này làm cho các điểm ảnh 13,27 "/ 1280 = 10,62"/1024 = 0,01037 "hoặc khoảng 0,263 mm.
Tất nhiên điều này không hợp lệ nếu người dùng không có độ phân giải phù hợp, màn hình có tính chất không phù hợp pixel vuông, hoặc đó là một màn hình tương tự cũ và các điều khiển không được điều chỉnh thích hợp cho màn hình hiển thị để lấp đầy toàn bộ màn hình vật lý hoặc tệ hơn, nó có thể là một máy chiếu. một bước hiệu chỉnh nơi bạn có người dùng thực sự giữ một người cai trị lên đến màn hình và đo kích thước của một cái gì đó cho bạn.Bạn có thể:
- Cho phép người dùng nhấp chuột vào bất kỳ hai điểm nào cách nhau một inch (hoặc một centimet).
- Vẽ một hộp trên màn hình và yêu cầu người dùng nhấn mũi tên lên và xuống để điều chỉnh chiều cao và mũi tên trái và phải để điều chỉnh chiều rộng cho đến khi ô chính xác là một inch (hoặc centimet) theo cái thước.
- Vẽ một hộp trên màn hình và yêu cầu người dùng cho bạn biết số lượng inch/cm trong mỗi thứ nguyên.
Bất kể bạn làm gì, đừng mong đợi kết quả của bạn chính xác 100%. Có quá nhiều yếu tố để chơi cho bạn (hoặc người dùng) để có được điều này chính xác, mọi lúc.
Lưu ý rằng 96 dpi thường là khá gần để chính xác. Pixel hiện đại trên màn hình không chiếu tất cả có xu hướng khoảng 0,25 mm, cung cấp hoặc lấy, vì vậy bạn thường kết thúc với khoảng 100 pixel vật lý trên mỗi inch, cho hoặc lấy, nếu màn hình được đặt ở độ phân giải gốc.(Tất nhiên, đây là một khái quát rất lớn và không không áp dụng cho tất cả các màn hình. Ví dụ: Eee PC có kích thước pixel khoảng 0,19 mm, nếu tôi nhớ chính xác thông số.)
này có vẻ như nó chỉ được bất cứ điều gì các cửa sổ có dpi thiết lập để, mà nói chung sẽ được 96dpi bất kể kích thước màn hình và độ phân giải. –
Đây là trường hợp của Graphics sẽ trả về (xem câu trả lời P Daddy). Không cần P/Invoke. –