[英]Are pixels ever not a square on a monitor?
我正在努力使用這個MSDN指南使我的應用程序DPI敏感,其中縮放技術使用來自設備上下文的X和Y邏輯像素。
int _dpiX = 96, _pdiY = 96;
HDC hdc = GetDC(NULL);
if (hdc)
{
_dpiX = GetDeviceCaps(hdc, LOGPIXELSX);
_dpiY = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(NULL, hdc);
}
然后,您可以使用縮放X和Y坐標
int ScaleX(int x) { return MulDiv(x, _dpiX, 96); }
int ScaleY(int y) { return MulDiv(y, _dpiY, 96); }
是否存在GetDeviceCaps(hdc, LOGPIXELSX)
和GetDeviceCaps(hdc, LOGPIXELSY)
為監視器返回不同數字的情況。 我真正關心的唯一設備是監視器,所以我需要有單獨的ScaleX(int x)
和ScaleY(int y)
函數嗎? 我可以只使用一個Scale(int px)
函數嗎? 這樣做會有不利之處嗎?
在此先感謝您的幫助。
這在理論上是可行的,但我不知道最近使用非方形像素的顯示器。 方形像素有很多優點,而且現有的軟件都采用方形像素,主流顯示器似乎不太可能采用非方形像素模式。
在許多情況下,如果你確實有與非方形像素監視器,你也許可以應用轉換,使其看起來好像它有方形像素(例如,通過設置映射模式)。
也就是說, 打印機通常使用非方形設備單元。 他們中的許多人在一個維度上具有比在另一個維度中更高的分辨率。 某些驅動程序使調用者可以使用此解決方案。 其他人會讓它看起來好像有正方形像素。 如果您想重新使用代碼進行打印,我建議您不要混淆水平和垂直縮放。
LCD面板的硬件像素始終是方形的。 使用CRT,您可以使用矩形正方形,例如在4:3
監視器上使用320x200
或320x400
分辨率(這些分辨率是實際使用的)。 在LCD上,您可以通過在顯示器上使用非原生分辨率獲得矩形像素 - 在5:4
顯示器上使用寬屏分辨率,反之亦然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.