Pergunta

O modo comum para criar um tipo de letra com GDI é usar o tamanho do ponto desejado e resolução vertical do dispositivo de destino (DPI) assim:

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

Assumindo que o modo de mapeamento MM_TEXT padrão, esta convertidos point_size na altura do pixel para o dispositivo desejado. (Esta é uma aproximação comum. Na verdade, existem 72,27 pontos em uma polegada, não 72.) (Os meios sinal de menos eu quero especificar a altura de caráter real, não a altura da célula.)

Se eu quiser criar uma fonte de lado - isto é, um com uma orientação e escapamento de 90 graus - eu uso LOGPIXELSX em vez de LOGPIXELSY? Para algumas das impressoras Estou alvo, as resoluções horizontal e vertical são diferentes.

Geralmente, se eu quiser um ângulo de theta, posso combinar LOGPIXELSX e LOGPIXELSY? Estou pensando em algo como isto:

// 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);
...

Isso faz sentido intuitivo para mim, mas eu estou querendo saber se isso é realmente como o GDI fonte drivers de impressora mapeador e trabalho.

Nenhuma solução correta

Outras dicas

1) Existem 72 pontos / polegada. (Que costumava ser 72,27 mas foi alterado). 2) Combinando LOGPIXELSX e LOGPIXELSY da maneira que você faz é bom, mas 3) O mapeador de fonte não olha para escapamento e orientação quando as fontes de mapeamento. Os valores LOGPIXELS só serão utilizadas como parte da transformação de coordenadas.

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

Não tenho certeza sobre como os "drivers de impressora de trabalho", porque a declaração poderia incluir muitos motoristas e impressoras possíveis.

Eles poderiam rasterizar com pixels quadrados, em seguida, esticar para não-quadrado. Eles poderiam transformar curvas glifo. Eles poderiam fazer outra coisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top