Pregunta

La forma común de crear una fuente con GDI es utilizar el tamaño de punto deseado y resolución vertical del dispositivo de destino (DPI) como esto:

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

Suponiendo que el modo de asignación MM_TEXT predeterminada, este convierte point_size en la altura del pixel para el dispositivo deseado. (Esta es una aproximación común. En realidad, hay 72,27 puntos en una pulgada, no 72.) (El signo menos significa que quiero para especificar la altura de carácter real, no la altura de la celda.)

Si quiero crear una fuente de lado - es decir, uno con una orientación y el escape de 90 grados - puedo utilizar en lugar de LOGPIXELSX LOGPIXELSY? Para algunas de las impresoras que estoy de orientación, las resoluciones horizontal y vertical son diferentes.

En general, si quiero un ángulo de theta, lo combino LOGPIXELSX y LOGPIXELSY? Estoy pensando en algo como esto:

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

Esto tiene sentido intuitivo para mí, pero me pregunto si esto es realmente el funcionamiento de los controladores de impresora y el transformador de fuentes de GDI.

No hay solución correcta

Otros consejos

1) Hay 72 puntos / pulgada. (Lo que solía ser, pero fue cambiado 72,27). 2) La combinación LOGPIXELSX y LOGPIXELSY de la manera que lo hace está bien, pero 3) El transformador de fuentes no se fija en el escape y la orientación al mapear fuentes. Los valores LOGPIXELS solo se utilizan como parte de la transformación de coordenadas.

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

No está seguro acerca de cómo los "controladores de impresora funcionan" porque la declaración podría incluir muchos conductores e impresoras posibles.

Podrían rasterizar con píxeles cuadrados, a continuación, estirar a no cuadrado. Ellos podrían transformar las curvas de glifos. No podían hacer otra cosa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top