Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Fonts 检测ClearType优化字体_Fonts_Gdi_Putty_Cleartype_Consolas - Fatal编程技术网

Fonts 检测ClearType优化字体

Fonts 检测ClearType优化字体,fonts,gdi,putty,cleartype,consolas,Fonts,Gdi,Putty,Cleartype,Consolas,问题: 有没有办法检查给定字体是否是Microsoft的字体之一 我想我可以简单地硬编码字体名称列表,因为这是一个相对较短的列表,但这似乎有点难看。无论Windows的区域设置和语言设置如何,字体名称是否相同 背景: 使用粗体、启用ClearType和ConsoleAs文本看起来非常难看。我决定研究一下源代码,看看是否能找出问题所在,我想我找到了以下(缩写)代码: 其目的是选择与普通字体尺寸相同的粗体字体。我假设PuTTY的ConsoleAs文本看起来很难看,因为ConsoleAs经过了大量优化

问题:

有没有办法检查给定字体是否是Microsoft的字体之一

我想我可以简单地硬编码字体名称列表,因为这是一个相对较短的列表,但这似乎有点难看。无论Windows的区域设置和语言设置如何,字体名称是否相同

背景:

使用粗体、启用ClearType和ConsoleAs文本看起来非常难看。我决定研究一下源代码,看看是否能找出问题所在,我想我找到了以下(缩写)代码:

其目的是选择与普通字体尺寸相同的粗体字体。我假设PuTTY的ConsoleAs文本看起来很难看,因为ConsoleAs经过了大量优化,可以在特定的像素边界上进行布局,所以试图将其塞入任意尺寸会产生糟糕的结果


因此,一个合适的解决方案似乎是检测ClearType优化字体,并尝试使用与初始CreateFont调用相同的宽度和高度创建这些字体的粗体版本。

我不确定我是否完全理解了“跟踪到以下(缩写)代码”的含义,但果不其然,bold在油灰中看起来很糟糕。下面是windows/window.c的putty源代码(使用subversion“svn公司”获得的修订版8914svn://svn.tartarus.org/sgt/putty“(2010年4月5日)


Kristjan

我不确定我是否完全遵循了“跟踪到以下(缩写)代码”的含义,但可以肯定的是,Consolas bold在Putty中看起来很糟糕。下面是windows/window.c的putty源代码(使用subversion“svn公司”获得的修订版8914svn://svn.tartarus.org/sgt/putty“(2010年4月5日)


Kristjan

不确定这是否是您的答案,但确保字体的宽度为精确的整数像素宽度,将使固定宽度的TrueType字体在ClearType下看起来不错


要实现这一点,您需要通过一些尝试和错误来“圆整”字体高度。

不确定这是否是您的答案,但确保字体宽度为精确的整数像素宽度,将使固定宽度的TrueType字体在ClearType下看起来很好


要实现这一点,您需要通过一些尝试和错误来“圆整”字体高度。

该“(缩写)”代码是windows\window.c的简化版本。你的分析和我的基本相同。我对PuTTY的本地副本所做的解决方法是,如果字体名为ConsoleAs,则字体宽度通过0。(带下划线的字体也可能弄乱;我认为您的修复程序将无法处理这些问题。)谢谢您的提示。我还跟踪了这个代码区域的问题,并最终将其归咎于CreateFont。现在,我修改了代码,使字体宽度传递为0(第1421行),并且看起来与预期的一样好。为了主动处理额外的窄/宽字体(尽管从未见过),我将x重置为0,如果它等于第1596行之前的字体宽度。在类似大小的其他固定宽度字体中找不到任何错误。“(缩写)”代码是windows\window.c的简化版本。你的分析和我的基本相同。我对PuTTY的本地副本所做的解决方法是,如果字体名为ConsoleAs,则字体宽度通过0。(带下划线的字体也可能弄乱;我认为您的修复程序将无法处理这些问题。)谢谢您的提示。我还跟踪了这个代码区域的问题,并最终将其归咎于CreateFont。现在,我修改了代码,使字体宽度传递为0(第1421行),并且看起来与预期的一样好。为了主动处理额外的窄/宽字体(尽管从未见过),我将x重置为0,如果它等于第1596行之前的字体宽度。在其他类似大小的固定宽度字体中找不到任何错误。根据我的测试,最好根本不指定字体宽度,而是让Windows选择适合高度的字体宽度。我确实尝试过,但您会注意到一些1像素间距的问题。根据我的测试,最好不要指定字体宽度,而是让Windows选择适合高度的字体宽度。我尝试过,但您会注意到一些1像素间距的问题。
font_height = cfg.font.height;
if (font_height > 0) {
    font_height =
        -MulDiv(font_height, GetDeviceCaps(hdc, LOGPIXELSY), 72);
    }
}
font_width = 0;

#define f(i,c,w,u) \
    fonts[i] = CreateFont (font_height, font_width, 0, 0, w, FALSE, u, FALSE, \
                           c, OUT_DEFAULT_PRECIS, \
                           CLIP_DEFAULT_PRECIS, FONT_QUALITY(cfg.font_quality), \
                           FIXED_PITCH | FF_DONTCARE, cfg.font.name)

f(FONT_NORMAL, cfg.font.charset, fw_dontcare, FALSE);

SelectObject(hdc, fonts[FONT_NORMAL]);
GetTextMetrics(hdc, &tm);

font_height = tm.tmHeight;
font_width = tm.tmAveCharWidth;

f(FONT_BOLD, cfg.font.charset, fw_bold, FALSE);
1386 fonts[i] = CreateFont (font_height, font_width, 0, 0, w, FALSE, u, FALSE, \ 1387 c, OUT_DEFAULT_PRECIS, \ 1388 CLIP_DEFAULT_PRECIS, FONT_QUALITY(cfg.font_quality), \ 1389 FIXED_PITCH | FF_DONTCARE, cfg.font.name) 1390 1391 f(FONT_NORMAL, cfg.font.charset, fw_dontcare, FALSE); 1392 1393 SelectObject(hdc, fonts[FONT_NORMAL]); 1394 GetTextMetrics(hdc, &tm); 1395 1396 GetObject(fonts[FONT_NORMAL], sizeof(LOGFONT), &lfont); 1397 1398 if (pick_width == 0 || pick_height == 0) { 1399 font_height = tm.tmHeight; 1400 font_width = tm.tmAveCharWidth; 1401 } ... 1477 if (bold_mode == BOLD_FONT) { 1478 f(FONT_BOLD, cfg.font.charset, fw_bold, FALSE); 1479 }
$ svn co svn://svn.tartarus.org/sgt/putty2
$ cd putty
$ perl mkfiles.pl
$ cd windows
$ --- edit window.c and move the 3 lines---
$ make CC=gcc-3 -f Makefile.cyg
$ --- move resulting executable files (including putty.exe) to a suitable folder
$ --- add shortcuts to the executables to Windows start menu