gpt4 book ai didi

printing - 如何指定不同方向的字体高度?

转载 作者:行者123 更新时间:2023-12-02 05:15:27 24 4
gpt4 key购买 nike

使用 GDI 创建字体的常用方法是使用所需的磅值和目标设备的垂直分辨率 (DPI),如下所示:

LOGFONT lf = {0};
lf.lfHeight = -MulDiv(point_size, GetDeviceCaps(hdc, LOGPIXELSY), 72);
...
HFONT hfont = CreateFontIndirect(&lf);

假设默认的 MM_TEXT 映射模式,这会将 point_size 转换为所需设备的像素高度。 (这是一个常见的近似值。一英寸实际上有 72.27 点,而不是 72。)(减号表示我要指定实际字符高度,而不是单元格高度。)

如果我想创建一种横向字体——也就是说,一个具有 90 度方向和擒纵机构的字体——我是否使用 LOGPIXELSX 而不是 LOGPIXELSY?对于我定位的某些打印机,水平和垂直分辨率不同。

通常,如果我想要一个 theta 的角度,我是否将 LOGPIXELSXLOGPIXELSY 结合起来?我在想这样的事情:

// Given theta in degrees (e.g., theta = 45.0) ...
double theta_radians = theta * 2.0 * pi / 360.0;
int dpi = static_cast<int>(GetDeviceCaps(hdc, LOGPIXELSX) * sin(theta_radians) +
GetDeviceCaps(hdc, LOGPIXELSY) * cos(theta_radians) +
0.5);
LOGFONT lf = {0};
lf.lfHeight = -MulDiv(point_size, dpi, 72);
// Set escapement and orientation to theta in tenths of a degree.
lf.lfEscapement = lf.lfOrientation = static_cast<LONG>(theta * 10.0 + 0.5);
...

这对我来说很直观,但我想知道这是否真的是 GDI 字体映射器和打印机驱动程序的工作方式。

最佳答案

1) 有 72 点/英寸。 (它曾经是 72.27 但被改变了。)2)按照您的方式组合 LOGPIXELSX 和 LOGPIXELSY 很好,但是3) 字体映射器在映射字体时不考虑擒纵机构和方向。 LOGPIXELS 值将仅用作坐标转换的一部分。

http://msdn.microsoft.com/en-us/library/ms969909(loband).aspx

不确定“打印机驱动程序如何工作”,因为该语句可能包含许多可能的驱动程序和打印机。

他们可以用方形像素光栅化,然后拉伸(stretch)到非方形。他们可以转换字形曲线。他们可以做其他事情。

关于printing - 如何指定不同方向的字体高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/929801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com