图像每英寸长度内的像素点数。
DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。
DPI是打印机、鼠标等设备分辨率的度量单位。是衡量打印机打印精度的主要参数之一,一般来说,DPI值越高,表明打印机的打印精度越高。
DPI是指每英寸的像素,也就是扫描精度。DPI越低,扫描的清晰度越低,由于受网络传输速度的影响,
web上使用的图片都是72dpi,但是冲洗照片不能使用这个参数,必须是300dpi或者更高350dpi。
例如要冲洗4*6英寸的照片,扫描精度必须是300dpi,那么文件尺寸应该是(4*300)*(6*300)=1200像素*1800像素。
以上是摘自百度百科.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
在过去我们使用调试器都是正常显示的, 但不知从何时开始有的时候使用调试器字体会显示的特别小. 原来是因为现在的屏幕越来越大导致的.
默认情况下, 像素高了, DPI如果还是 100%, 那屏幕上的字就会非常小. 想要解决,只能把像素调低了, 或者把DPI调高.
当把DPI调高之后, 有不少自绘的软件如果没有处理DPI的问题, 显示的字体或者绘制的按钮等, 就会显的特别特别的小.(屏幕越大字越小.)
cpudbg就没有处理dpi的问题, 导致显示菜单图标非常小 :( 如图:
除了菜单栏显示的字体正常, 其它字体都非常小.(我电脑当前DPI设置为150%)
那遇到DPI百分比值特别大的, 应该如何处理呢? GPT给出了一个解决方案如下:
[C] 纯文本查看 复制代码
// 获取系统DPI
int CDebugger::GetSystemDpi()
{
HDC screen = GetDC(NULL);
int dpiX = GetDeviceCaps(screen, LOGPIXELSX);
// int dpiY = GetDeviceCaps(screen, LOGPIXELSY);
ReleaseDC(NULL, screen);
return dpiX;
}
// 逻辑坐标和物理坐标之间的转换
int CDebugger::DPI(int logical)
{
return MulDiv(logical, GetSystemDpi(), 96);
}
void test()
{
m_hHwndLabelCombo =
CreateWindowEx(
0,
_TEXT("ComboBox"), // window class name
NULL, // window caption
WS_VSCROLL | WS_CHILDWINDOW | WS_VISIBLE | CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_HASSTRINGS, // window style
g_lpThis->DPI(12), // initial x position
g_lpThis->DPI(12), // initial y position
g_lpThis->DPI(410), // initial x size
g_lpThis->DPI(300), // initial y size
hdlg, // parent window handle
NULL, // window menu handle
GetModuleHandle(NULL), // program instance handle 11111 22222 33333
NULL);
}
通过以上的代码创建的窗口或控件就能自适应显示大小了.
再看看我将DPI设置为225%, 修复DPI问题之后的效果:
上图只处理了菜单栏的图标,反汇编标题等是没有处理,所以字体显示还是小的.
------------------------------------------------------------------------------
如果一台主机投出2个及以上的视频源. 在系统设置里可以给每个屏幕设置不同的DPI.
假如有三块屏幕,屏幕A设置 DPI:100% B设置 DPI:150% C设置 DPI:200%,
你猜猜这个时候获取的DPI值会是多少? :)
|