2008-11-24 24 views
6

Khi lấy DPI cho màn hình trong Windows (bằng cách sử dụng :: GetDeviceCaps) giá trị ngang có luôn giống với chiều dọc không? Ví dụ:Windows GDI: DPI ngang/dọc

HDC dc = ::GetDC(NULL); 
const int xDPI = ::GetDeviceCaps(dc, LOGPIXELSX); 
const int yDPI - ::GetDeviceCaps(dc, LOGPIXELSY); 
assert(xDPI == yDPI); 
::ReleaseDC(NULL, dc); 

Các giá trị này có khác biệt không?

+0

Không phải vì chế độ hiển thị 320x200 trở nên lỗi thời. –

+0

Tại sao lại giả sử bất cứ điều gì? Bạn đã biết cách truy vấn cho cả hai, vậy tại sao không chỉ truy vấn cho mỗi người trong số họ? Bạn cũng có thể kiểm chứng mã của bạn trong tương lai, chỉ trong trường hợp một cái gì đó đến cùng xảy ra là khác nhau! –

Trả lời

6

Có thể có sự khác biệt, nhưng thường chỉ áp dụng cho máy in. Có thể giả định rằng màn hình sẽ luôn có DPI ngang và dọc giống hệt nhau.

+0

Đừng làm thế. Chúng ta có thể phải đối mặt với pixel không vuông. – Joshua

1

Tôi chưa bao giờ thấy họ có khác nhau, nhưng trên this trang MSDN Tôi thấy một nhận xét cho thấy rằng họ có thể là:

int nHorz = dc.GetDeviceCaps(LOGPIXELSX); 
    int nVert = dc.GetDeviceCaps(LOGPIXELSY); 

    // almost always the same in both directions, but sometimes not! 
0

Tôi chưa từng thấy một trường hợp họ khác nhau, nhưng thực tế là có hai cuộc gọi riêng biệt cho nó mạnh mẽ cho thấy rằng họ có thể đôi khi.

0

Dễ dàng cho chúng khác biệt nếu màn hình được thiết lập để sử dụng tỷ lệ độ phân giải màn hình không giống với tỷ lệ màn hình vật lý, chẳng hạn như độ phân giải 4: 3 như 1600x1200 trên màn hình 16: 9.

+1

Ngay cả khi màn hình vật lý không hiển thị pixel vuông, không thể định cấu hình Windows để phản ánh thực tế này. –

Các vấn đề liên quan