¿Quién conoce la estructura de datos de la fuente?
Descripción del problema:
¿Cómo extraer el ancho y alto de cada carácter en una fuente en diferentes tamaños de fuente? ¿Cuál es la estructura de un archivo de fuente? Cuando programamos, ¿cómo obtenemos la información relevante (como arriba: ancho y alto)?
Por favor no me den funciones o clases en la biblioteca API o MFC. Sólo quiero saber dónde está la información y en qué formato está almacenada para poder extraerla. Debido a que actualmente estoy diseñando un motor de interfaz de ventana multiplataforma, no puedo comprender el espaciado de salida y otra información de cada palabra al ingresar texto. Esta información no se puede usar en el sistema WINDOWS, por lo que me gustaría saber sobre el almacenamiento de datos. formato. ¡Gracias de antemano! !
Análisis:
Depende de qué fuente quieras usar:
1. La estructura de las fuentes vectoriales y el método de lectura de las fuentes.
UCDOS3.0 proporciona cinco fuentes vectoriales: fuente de símbolo gráfico (HZKSLT) y fuente Song, fuente normal, fuente en negrita y fuente de imitación.
Dinastía Song (HZKSLSTJ, HZKSLKTJ, HZKSLHTJ, HZKSLFSJ)
Y los símbolos gráficos del 01 al 15 se almacenan por separado de los caracteres chinos del 16 al 87, pero sus estructuras son las mismas. mismo.
Cada fuente vectorial consta de dos partes: una es la información de índice de cada carácter chino. La dirección de desplazamiento y la longitud de
se colocan delante de la fuente; el segundo son los datos de fuente del carácter chino, incluidos los diversos puntos componentes del carácter chino. Las coordenadas de
se colocan en la parte posterior de la fuente.
1. Dirección de desplazamiento del almacenamiento de glifos
En las fuentes vectoriales, la información de índice de cada carácter chino tiene una longitud fija, que es de 6 bytes, de los cuales los primeros 4 bytes están desplazados. .
Dirección, los últimos 2 bytes son la longitud. El estándar nacional estipula que los caracteres chinos están representados por códigos internos. Los códigos internos son de dos bytes y el bit más alto es
1. Suponiendo que el código interno de un carácter chino es ddff, entonces el primer índice. información de este carácter chino en la fuente La dirección se puede calcular usando la siguiente fórmula.
Salida:
La primera dirección de la información del índice de caracteres chinos = ((DD-0xa 0-16)* 94+(FF-0xa 0-1))* 6.
La primera dirección de la información del índice del símbolo = ((DD-0xa 0-1)* 94+(FF-0xa 0-1))* 6.
2. Recuperación de datos de fuentes
Los datos de fuentes consisten en códigos de identificación y posiciones relativas de puntos adyacentes. El código de identificación ocupa dos dígitos y se ubica en el extremo superior del byte.
Es decir, los dígitos 7º y 6º, * * * tienen cuatro estados: 00, 01, 10, 11, cada estado va seguido de un código diferente.
Código, el método de codificación es:
11: indica que este byte es el byte inicial del polígono de trazo y los 5-0 bits restantes se agregan al segundo byte. El séptimo bit de
constituye el valor x del punto inicial, y el bit 6 al 0 del segundo byte es el valor y. Este punto se utiliza como punto inicial para hacer que cada punto sea relativo.
Aquí se estipula el aumento o disminución de la posición: el aumento es positivo, lo que significa que el bit de signo es 0, y la disminución es negativo, lo que significa que el bit de signo es 0.
El bit es 1.
Los 10 bits 5-4 de este byte se dividen en tres estados cuando es 00, el bit 3 es el signo del incremento x y los bits
2-0 son X; incremento, el bit alto del siguiente byte es el signo del incremento Y, y los 7 bits restantes son el incremento Y cuando es 01, el tercer bit es el signo del incremento Y, el segundo es el bit -0; el signo del incremento Y, el bit alto del siguiente byte es el signo del incremento X, y el resto.
Los 7 bits son el incremento de x; cuando es 10 u 11, el bit alto del siguiente byte es el signo del incremento de X, y los 7 bits restantes son el incremento de X.
Magnitud, entonces el bit alto del siguiente byte es el signo del incremento Y, y los 7 bits restantes son el valor del incremento Y.
01 - Los 5-4 bits de este byte son los símbolos H para incrementos posteriores de X e Y, y los últimos 4 bits son el conteo n,
indicando que hay n bytes siguientes, los primeros 4 bits de cada byte son el valor de incremento de Los incrementos de xey son positivos cuando H es 01, X es negativo e Y es positivo cuando h es 10, los incrementos de X e Y son; negativo; cuando h es 11, X es positivo, Y es negativo.
00 - Los bits restantes del byte son el recuento n, y el séptimo bit de cada byte es el incremento de x en los n bytes siguientes.
Los bits 6-4 son el valor del incremento X, el bit 3 es el signo del incremento Y y los bits 2-0 son el valor del incremento Y.
De acuerdo con el código interno de caracteres chinos y la primera fórmula de cálculo de dirección de la información del índice de caracteres chinos, obtenga la dirección de desplazamiento de los datos de fuente.
Y la información de longitud, lea la información de datos correspondiente de la parte de datos de fuente y obtenga cada punto final del trazo del carácter chino después de la restauración.
Las coordenadas también obtienen la fuente.
B. Fuente de mapa de bits
Hay dos formas de usar TURBO C para escribir mapas de bits chinos en la pantalla:
1. Función de dibujo: Voidfar _ cdeclputpixel ( int x, int y, int color);
2. Función de relleno personalizada:
void far _ Cdecl setfillpattern(char far * up attern, int color);
void far _Cdecl bar(int left, int top, int right, int bottom);
Usar el primero es más lento que el segundo, pero el último código es problemático. Cuando la barra de funciones de histograma se usa junto con la función de patrón de relleno personalizado setfillpattern, siempre se llena desde la posición de la pantalla donde las coordenadas xey son múltiplos de 8.
Si las coordenadas xey de la posición de visualización inicial son exactamente múltiplos de 8, no es necesario ajustar el orden de relleno de cada punto de la fuente.
En general, de lo contrario, será necesario realizar ajustes para mostrar los caracteres chinos correctamente.
Uppattern es un puntero a una secuencia de 8 bytes, cada byte corresponde a 8 píxeles en el patrón de relleno. Si
Si un bit es 1, el píxel correspondiente se dibuja en color; en caso contrario, el píxel correspondiente permanece en su color original.
La fuente de 16 puntos se puede dividir en cuatro modos de relleno de 8 * 8 puntos, y la fuente de 24 puntos se puede dividir en nueve modos de relleno de 8 * 8 puntos.
El histograma relleno de la matriz.
Este programa utiliza la biblioteca de caracteres chinos UCDOS como ejemplo.
Utilice una fuente de matriz de 24 puntos. Todos los puntos de la fuente se extienden hacia la izquierda, derecha y arriba y abajo respectivamente para formar caracteres huecos si desea destacar.
Proyección de volumen; , según la dirección de proyección, en la fuente Agregue puntos en diferentes direcciones y luego elimine los puntos en la fuente. Para garantizar que los puntos en el límite del chip del personaje no se eliminen, los puntos en el límite deben conservarse.
C. Trazado de fuentes vectoriales
Plotter.000 es una biblioteca de fuentes vectoriales de caracteres chinos. Cada carácter chino se almacena según el código de posición y hay 34 registros para cada trazo. .
Bytes de longitud, los primeros 30 bytes son la información de ubicación de la línea de puntos y los últimos 4 bytes son la ubicación de almacenamiento del siguiente trazo del carácter chino en el archivo.
Conjunto (número de registro), cada trazo contiene 15 líneas, es decir, 30 puntos, el punto inicial y el punto final de las 15 líneas se almacenan en orden, antes de cada byte.
Los cuatro dígitos son el valor de la posición X y los últimos cuatro dígitos son el valor de la posición Y.
Valor del código de posición del carácter chino=(primer código de carácter chino-160)*10(segundo código-160)
Número de registros del primer carácter chino=valor del código de posición-(posición Valor del código/100*6)-1504.