Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 显示器上的像素不是正方形吗?_Windows_User Interface_Dpi - Fatal编程技术网

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

Windows 显示器上的像素不是正方形吗?,windows,user-interface,dpi,Windows,User Interface,Dpi,我正在努力使我的应用程序对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(i

我正在努力使我的应用程序对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(intx)
ScaleY(inty)
函数吗?我可以只使用一个
Scale(intpx)
函数吗?这样做会有负面影响吗


提前感谢您的帮助。

理论上这是可能的,但我不知道最近有哪款显示器使用非方形像素。方形像素有很多优点,而且现有的软件都采用方形像素,所以主流显示器似乎不太可能采用非方形像素模式

在许多情况下,如果您确实有一个非方形像素的监视器,您可能会应用一个变换,使其显示为具有方形像素(例如,通过设置映射模式)


也就是说,打印机具有非方形设备单元是很常见的。其中许多在一个维度上的分辨率比在另一个维度上的分辨率高得多。某些驱动程序使调用者可以使用此解析。其他人会让它看起来像是正方形像素。如果您想重复使用代码进行打印,我建议您不要将水平缩放和垂直缩放混为一谈。

LCD面板的硬件像素始终为正方形。使用CRT,您可以使用矩形正方形,就像在
4:3
监视器上使用
320x200
320x400
分辨率一样(实际使用了这些分辨率)。在LCD上,您可以使用显示器上的非本机分辨率获得矩形像素,
5:4
显示器上的宽屏分辨率,反之亦然。

有很多等离子显示器(大部分是电视),其内部分辨率为1024x768,但为16:9。谷歌“plasma 1024x768 16:9”为例“在电脑显示器上很难找到这个,但如果它很容易编程,那么支持这种情况就太酷了!”@克里斯:我怀疑1024x768宽屏显示器的硬件将在低水平上应用转换。在驱动程序级别,您将看到方形像素的幻觉,可能是通过使用16x9排列的1280x720虚拟屏幕,驱动程序下的硬件将对方形虚拟像素重新采样,以生成本机非方形像素。我怀疑您是否能够直接在WinAPI层处理非方形本机像素。