像素在显示器上不是正方形吗?



我正在努力使用此 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 320x200320x400分辨率一样(实际使用这些分辨率)。在LCD上,您可以通过在显示器上使用非原始分辨率来获得矩形像素 - 显示器上的宽屏分辨率5:4反之亦然。

最新更新