Metarchivo de Windows

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

Metarchivo de Windows (WMF) es un formato de archivo de imagen diseñado originalmente para Microsoft Windows en la década de 1990. El formato de metarchivo de Windows original no era independiente del dispositivo (aunque podría hacerse más con encabezados de ubicación) y puede contener gráficos vectoriales y componentes de mapa de bits. Actúa de manera similar a los archivos SVG. Los archivos WMF fueron reemplazados posteriormente por Metarchivos mejorados (archivos EMF) que proporcionaban independencia del dispositivo. Luego, los archivos EMF se mejoraron a través de archivos EMF+.

Esencialmente, un metarchivo almacena una lista de registros que consta de comandos de dibujo, definiciones de propiedades y objetos gráficos para mostrar una imagen en la pantalla. Los comandos de dibujo utilizados están estrechamente relacionados con los comandos de la API de interfaz de dispositivo gráfico (GDI) que se utiliza para dibujar en Microsoft Windows.

Hay tres tipos principales de metarchivos: un WMF es un formato de 16 bits introducido en Windows 3.0. Es el formato vectorial nativo para aplicaciones de Microsoft Office como Word, PowerPoint y Publisher. A partir de 2017, la revisión 14 de la especificación de formato de metarchivo de Windows está disponible para lectura en línea o descarga como PDF. Los archivos EMF, que reemplazaron a los archivos WMF, funcionan con el mismo principio, solo que es un formato de archivo de 32 bits que también permite la incrustación de datos privados dentro de "comentario" registros. EMF+ es una extensión de los archivos EMF y está incrustada en estos registros de comentarios, lo que permite que las imágenes y el texto usen comandos, objetos y propiedades similares a Windows GDI+.

Historia

El formato de archivo WMF original de 16 bits se especificó completamente en el volumen 4 de la documentación del SDK de Windows 3.1 de 1992 (al menos si se combina con las descripciones de las funciones y estructuras individuales en los otros volúmenes), pero esa especificación era vaga sobre un pocos detalles Estos manuales se publicaron como libros impresos disponibles en las librerías sin hacer clic en EULA u otras restricciones de licencia inusuales (solo una advertencia general de que si se compra como parte de un paquete de software, el software estaría sujeto a uno).

Con el tiempo, la existencia de esa especificación histórica se olvidó en gran medida y algunas implementaciones alternativas recurrieron a la ingeniería inversa para descubrir el formato de archivo de los archivos WMF existentes, lo cual era difícil y propenso a errores. En septiembre de 2006, Microsoft volvió a publicar la especificación de formato de archivo WMF en una forma más completa en el contexto de la Promesa de especificación abierta de Microsoft, prometiendo no hacer valer los derechos de patente a los implementadores de formato de archivo.

Más tarde, Microsoft desechó los archivos WMF en favor de los archivos EMF de 32 bits, ya que los archivos WMF tenían problemas reales con la independencia del dispositivo, a pesar del uso de un "ubicable" encabezado de archivo que proporcionó independencia básica del dispositivo. Microsoft descubrió que los desarrolladores que usan el formato estaban "[incrustando] comentarios de aplicación, ubicación o escalado en los metarchivos... Otros agregaron encabezados al metarchivo que proporcionaban diversa información específica de la aplicación", causando importantes problemas de compatibilidad.. Por lo tanto, en 1992 con Windows NT 3.1, Microsoft introdujo el formato de metarchivo mejorado (EMF), un formato basado en la API de Win32 y con el que incorporaron la independencia del dispositivo. — estos también se conocían como metarchivos NT. Con el lanzamiento de Windows XP y GDI+, el conjunto de registros tuvo que aumentar significativamente, por lo que Microsoft lanzó EMF+ como una extensión del formato de archivo EMF existente.

Estructura del metarchivo

Comparación de Windows Metafiles – note que los archivos WMF pueden incluir archivos EMF+

Los archivos WMF, EMF y EMF+ constan de una serie de registros que se reproducen para producir una salida gráfica. Algunos registros definen objetos que pueden especificar objetos gráficos utilizados para determinar cómo deben dibujarse los gráficos (por ejemplo, las plumas especifican el color y el ancho de las líneas). Cada uno de estos objetos se almacena en metarchivos y se colocan en una tabla de objetos, que rastrea el uso de objetos gráficos mientras se procesa el metarchivo. La tabla de objetos es una matriz asociativa de índices para estructuras de objetos gráficos definidas dentro del metarchivo.

Los archivos WMF y EMF manejan el procesamiento de objetos de manera diferente a los registros EMF+ en los archivos EMF. A medida que se procesa un archivo WMF y EMF, los registros se leen en una tabla de objetos una vez que se define un objeto. Si se elimina un objeto, el objeto se libera de la tabla y el identificador se puede reutilizar. En particular, un objeto no se utilizará hasta que se seleccione específicamente durante la reproducción de la grabación. Esto difiere para los archivos EMF+, que también utilizan una matriz asociativa a través de un hashmap que registra el objeto junto con un identificador de objeto. Sin embargo, a diferencia de los archivos WMF y EMF que pueden eliminar un objeto, cuando se crea un nuevo objeto que tiene el mismo índice que un objeto existente, la entrada en la tabla se reemplaza con el nuevo objeto. Un archivo EMF tampoco necesita seleccionar específicamente un objeto antes de usarlo.

WMF

Estructuras de los archivos originales y placeable de Windows

Los archivos WMF no se diseñaron originalmente para ser independientes del dispositivo, lo que significa que no se podía reproducir el archivo en dispositivos de salida que difieran del dispositivo original en el que se grabó el archivo. Una solución parcial a este problema fue inventada por Aldus Corporation, quien agregó un "ubicable" encabezado, llamado "encabezado APM", que agregó un rectángulo delimitador, una versión de metarchivo, tamaño de metarchivo, número de objetos en el metarchivo y el tamaño del registro único más grande en el metarchivo. Posteriormente, Microsoft lo incorporó al formato WMF, a partir de Windows 2000.

Los archivos WMF están estructurados por una serie de registros, comenzando con una serie de registros de control: el registro de encabezado, el registro colocable opcional antes mencionado, y terminan con un registro de fin de archivo.

Encapsulados por los registros de control están los registros que componen la imagen misma. Estos registros funcionan dentro de lo que se conoce como el contexto del dispositivo de reproducción, que es la colección de propiedades y objetos que conforman el entorno gráfico de un dispositivo cuando el metarchivo se "reproduce& #34; en este dispositivo de salida.

Los registros distintos de los registros de control se pueden agrupar en gran medida en registros de mapa de bits, registros de dibujo, registros de objetos, registros de estado y registros de escape.

Registros de mapa de bits

Los registros de mapa de bits administran y generan imágenes de mapa de bits.

Nombre Descripción
META_BITBLT Especifica cómo hacer una transferencia de bloques. Estos registros pueden especificar un bitmap para usar como fuente, o una región.
META_DIBBITBLT Especifica cómo hacer una transferencia de bloques de una imagen de bitmap dependiente del dispositivo. Estos registros pueden especificar un bitmap para usar como fuente, o una región.
META_DIBSTRETCHBITBLT Especifica cómo hacer una transferencia de bloques de un bitmap dependiente del dispositivo, pero permite la expansión o contracción de la imagen. Estos registros pueden especificar un bitmap para usar como fuente, o una región.
META_SETDIBTODEV Especifica el color para establecer un bloque de píxeles en una imagen de bitmap dependiente del dispositivo. Estos registros pueden especificar un bitmap para usar como fuente, o una región.
META_STRETCHBLT Especifica cómo hacer una transferencia de bloques, pero permite la expansión o contracción de la imagen.
META_STRETCHDIB Especifica cómo hacer una transferencia de bloques de un bitmap dependiente del dispositivo, pero permite la expansión o contracción de la imagen. Estos registros pueden especificar un bitmap para usar como fuente, o una región.

Registros de dibujo

Los registros de dibujo producen resultados gráficos.

Nombre Descripción
META_ARC Dibuja un arco elíptico.
META_CHORD Dibuja un acorde.
META_ELLIPSE Dibuja un arco elíptico.
META_EXTFLOODFILL Llena un área con un cepillo.
META_EXTTEXTOUT Dibujar texto con fuente, color de fondo y color de texto del contexto del dispositivo de reproducción.
META_FILLREGION Llena una región con un cepillo especificado.
META_FLOODFILL Llena un área con un cepillo.
META_FRAMEREGION Dibuja una frontera alrededor de una región de la página con un cepillo.
META_INVERTREGION Pinta una región del gráfico con colores invertidos.
META_LINETO Dibuja una línea media abierta desde la posición de dibujo definida en el contexto del dispositivo de reproducción hasta un punto especificado.
META_PAINTREGION Pintar una región con el cepillo actual especificado en el contexto del dispositivo de reproducción.
META_PATBLT Pintar una región con el cepillo actual especificado en el contexto del dispositivo de reproducción y luego combinar el color del pincel y el color de la superficie usando una operación de mapa.
META_PIE Dibuja una cuña en forma de pie atada por la intersección de una elipse y dos radiales — la línea se establece a través del conjunto de la pluma a través del contexto del dispositivo de reproducción, y el área atada por la forma de la tarta se llena por el cepillo actual del contexto del dispositivo de reproducción.
META_POLYLINE Dibuja una serie de secuencias de línea conectando los puntos en un array especificado.
META_POLYGON Pinta un polígono compuesto por dos o más vértices conectados por líneas rectas. El polígono se describe utilizando la pluma y se llena usando el modo de relleno de cepillo y polígono que se define en el contexto del dispositivo de reproducción.
META_POLYPOLYGON Pinta una serie de polígonos cerrados, que pueden superponerse. Cada polígono se delinea utilizando el bolígrafo y llenado utilizando el modo de relleno de pincel y polígono que se define en el contexto del dispositivo de reproducción.
META_RECTANGLE Pinta un rectángulo, que se esboza mediante el lápiz y se llena mediante el cepillo y se llena mediante el cepillo que se define en el contexto del dispositivo de reproducción.
META_ROUNDRECT Pinta un rectángulo con esquinas redondeadas. El rectángulo se describe mediante el uso de la pluma y se llena mediante el cepillo y se llena mediante el cepillo que se define en el contexto del dispositivo de reproducción.
META_SETPIXEL Establece el píxel en las coordenadas especificadas al color especificado.
META_TEXTOUT Muestra una cadena de caracteres en la ubicación especificada utilizando la fuente, el color de fondo y el color de texto que se definen en el contexto del dispositivo de reproducción.

Registros de objetos

Los registros de objetos crean y administran objetos gráficos. En los archivos WMF hay dos amplias categorías de objetos: objetos gráficos y objetos de estructura. Los objetos de estructura no se crean ni eliminan explícitamente en un WMF, sino que son estructuras complejas. Por ejemplo, BitmapCoreHeader contiene información sobre las dimensiones y el formato de color de un mapa de bits independiente del dispositivo, que a su vez forma parte de un objeto DeviceIndependentBitmap. Sin embargo, un objeto gráfico especifica parámetros para la salida de gráficos y, durante la reproducción de WMF, configura el contexto del dispositivo de reproducción.

Los objetos gráficos pueden ser pinceles (define el estilo, el color y el patrón de un pincel que define cómo pintar un área del gráfico), fuentes (define propiedades que afectan cómo se muestra el texto), paletas (especifica los colores como valores independientes del dispositivo, definidos por una aplicación), bolígrafos (especifica los atributos gráficos de una línea) y < i>regiones (que especifican segmentos de línea y curva que definen una forma).

Nombre Descripción
META_CREATEBRUSHINDIRECT Crea un objeto de pincel de un objeto LogBrush (bloqueo lógico).
META_CREATEFONTINDIRECT Crea un objeto de pincel de un objeto de fuente.
META_CREATEPALETTE Crea un objeto de paleta.
META_CREATEPATTERNBRUSH Crea un objeto de pincel de un objeto LogBrush (bloqueo lógico).
META_CREATEPENINDIRECT Crea un objeto pluma.
META_CREATEREGION Crea un objeto de región.
META_DELETEOBJECT Borrar un objeto.
META_CREATEBRUSHINDIRECT Crea un objeto de pincel de un objeto LogBrush (bloqueo lógico).
META_DIBCREATEPATTERNBRUSH Crea un objeto de cepillo de un bitmap independiente del dispositivo.
META_SELECTCLIPREGION Especifica el objeto de la región que será la región de recortado actual.
META_SELECTOBJECT Selecciona el objeto que será el objeto actual para el contexto del dispositivo de reproducción, que funciona en todos los objetos gráficos excepto los objetos de paleta, que debe establecerse con META_SELECTPALETTE.
META_SELECTPLAETTE Selecciona la paleta lógica para el contexto del dispositivo de reproducción.

Registros estatales

Los registros de estado administran las propiedades gráficas del contexto del dispositivo de reproducción.

Nombre Descripción
META_ANIMATEPALETTE Redefines entradas en la paleta lógica que se define en el contexto del dispositivo de reproducción con un objeto de paleta especificado.
META_EXCLUDECLIPRECT Establece la región de clipping que se define en el contexto del dispositivo de reproducción a la región de clipping existente menos un rectángulo especificado.
META_INTERSECTCLIPRECT Establece la región de recortado que se define en el contexto del dispositivo de reproducción a la intersección de la región de recortado existente y un rectángulo especificado.
META_MOVETO Establece la posición de salida en el contexto del dispositivo de reproducción a un punto especificado.
META_OFFSETCLIPRGN Mueva la región de clipping que se define en el contexto del dispositivo de reproducción por los offsets especificados.
META_OFFSETVIEWPORTORG Mueva el origen del mirador en el contexto del dispositivo de reproducción por los offsets horizontales y verticales especificados.
META_OFFSETWINDOWORG Mueva el origen de la ventana de salida en el contexto del dispositivo de reproducción por los offsets horizontales y verticales especificados.
META_REALIZEPALETTE Mapas entradas de la paleta lógica que se define en el contexto del dispositivo de reproducción a la paleta del sistema.
META_RESIZEPALETTE Redetique el tamaño de la paleta lógica que se define en el contexto del dispositivo de reproducción.
META_RESTOREDC Restaura el contexto del dispositivo de reproducción desde un contexto de dispositivo previamente guardado.
META_SAVEDC Guarda el contexto del dispositivo de reproducción para posterior recuperación.
META_SCALEVIEWPORTEXT Escala las dimensiones horizontales y verticales del mirador que se define en el contexto del dispositivo de reproducción utilizando las proporciones formadas por multiplicadores y divisores especificados.
META_SCALEWINDOWEXT Escala las dimensiones horizontales y verticales de la ventana de salida que se define en el contexto del dispositivo de reproducción utilizando las proporciones formadas por multiplicadores y divisores especificados.
META_SETBKCOLOR Establece el color de fondo en el contexto del dispositivo de reproducción a un color especificado.
META_SETBKMODE Establece el modo de mezcla de fondo en el contexto del dispositivo de reproducción.
META_SETLAYOUT Define la orientación de diseño en el contexto del dispositivo de reproducción.
META_SETMAPMODE Define el modo de mapeo en el contexto del dispositivo de reproducción.
META_SETMAPPERFLAGS Define el algoritmo que el mapper fuente utiliza cuando mapea fuentes lógicas a fuentes físicas.
META_SETPALENTRIES Define los valores de color RGB en una gama de entradas en la paleta lógica que se define en el contexto del dispositivo de reproducción.
META_SETPOLYFILLMODE Define el modo de relleno de polígono en el contexto del dispositivo de reproducción para operaciones gráficas que llenan polígonos.
META_SETRELABS Un disco sin usar.
META_SETROP2 Define el modo de mezclado de raster de primer plano en el contexto del dispositivo de reproducción.
META_SETSTRETCHBLTMODE Define el modo de estiramiento bitmap en el contexto del dispositivo de reproducción.
META_SETTEXTALIGN Define los valores de alineación de texto en el contexto del dispositivo de reproducción.
META_SETTEXTCHAREXTRA Define el espaciamiento entre caracteres para la justificación de texto en el contexto del dispositivo de reproducción.
META_SETTEXTCOLOR Define el color del primer plano de texto en el contexto del dispositivo de reproducción.
META_SETTEXTJUSTIFICACIÓN Define la cantidad de espacio para añadir para romper caracteres en una cadena de texto justificado.
META_SETVIEWPORTEXT Define las dimensiones horizontales y verticales del mirador en el contexto del dispositivo de reproducción.
META_SETVIEWPORTORG Define el origen visual en el contexto del dispositivo de reproducción.
META_SETWINDOWEXT Define las dimensiones horizontales y verticales de la ventana de salida en el contexto del dispositivo de reproducción.
META_SETWINDOWORG Define el origen de la ventana de salida en el contexto del dispositivo de reproducción.

Récords de escape

WMF registro genérico de escape

Los registros de escape son un medio para ampliar la funcionalidad de metarchivo a través de registros que no están definidos de otro modo como un tipo de registro WMF. Cada registro de escape contiene una función de registro, una función de escape y potencialmente datos de escape.

Los siguientes registros de escape forman un archivo WMF.

Nombre Descripción
ABORTDOC Deja de procesar el documento actual.
BEGIN_PATH Abre un camino.
CHECK_JPEGFORMAT Determina si puede manejar la imagen JPEG dada.
CHECK_PNGFORMAT Determina si puede manejar la imagen PNG dada.
CLIP_TO_PATH Aplica una función a la actual ruta de clipping PostScript.
CLOSE_CHAEL Igual que ENDDOC.
DOWNLOAD_FACE Establece el nombre de la fuente en el dispositivo de salida.
DOWNLOAD_HEADER Descargas conjuntos de procedimientos de PostScript.
DRAW_PATTERNRECT Dibuja un rectángulo con un patrón definido.
ENCAPSULATED_POSTSCRIPT Envía datos de PostScript encapsulados arbitrarios directamente al controlador de impresora.
END_PATH Termina un camino.
ENDDOC Notifica al conductor de la impresora que un nuevo trabajo de impresión está terminando.
EPS_PRINING Indica el inicio y final de la impresión EPS.
EXTTEXTO Dibuja texto usando la fuente seleccionada, color de fondo y color de texto.
GET_COLORTABLE Obtiene valores de tabla de colores del controlador de impresora.
GET_DEVICEUNITS Consigue las unidades de dispositivo configuradas actualmente en el dispositivo de salida.
GET_EXTENDED_TEXTMETRICS Obtiene las métricas de texto extendidas que actualmente están configuradas en el controlador de impresora.
GET_FACENAME Consigue el nombre de la fuente configurado actualmente en el dispositivo de salida.
GET_PAIRKERNTABLE Consigue la tabla de fuentes kern actualmente definida en el dispositivo de salida.
GET_PHYSPAGESIZE Retrieves el tamaño de página física actualmente seleccionado en el dispositivo de salida.
Get_PRININGOFFSET Retrieves el offset desde la esquina superior izquierda de la página física donde comienza la impresión o dibujo real.
GET_PS_FEATURESETING Consulta el controlador de impresora para información sobre las funciones PostScript soportadas en el dispositivo de salida.
GET_SCALINGFACTOR Retrieves los factores de escalado para el eje x y el eje y de una impresora.
META_ESCAPE_ENHANCED_METAFILE Solía incrustar un metafil EMF dentro de un metafile WMF.
METAFILE_DRIVER Consulta al controlador de impresora sobre su soporte para metafiles en el dispositivo de salida.
NEWFRAME Notifica al controlador de impresora que la aplicación ha terminado de escribir a una página.
NEXTBAND Notifica al controlador de impresora que la aplicación ha terminado de escribir a una banda.
PASSTHROUGH Pasa a través de datos arbitrarios al controlador de impresora.
POSTSCRIPT_DATA Envía datos de PostScript arbitrarios al dispositivo de salida.
POSTSCRIPT_IDENTIFY Establece el controlador de impresora a modo PostScript centrado o GDI centrado.
POSTSCRIPT_IGNORE Notifica el dispositivo de salida para ignorar los datos de PostScript.
POSTSCRIPT_INJECTION Inserta un bloque de datos crudos en un flujo PostScript.
POSTSCRIPT_PASSTHROUGH Envia datos arbitrarios directamente a un controlador de impresora, que se espera procesar estos datos sólo cuando se encuentra en modo PostScript.
OPEN_CHANIEL Actúa igual que STARTDOC, con documento NULL y nombre de archivo de salida, y datos en modo bruto.
QUERY_DIBSUPPORT Consulta al controlador de impresora sobre su soporte para DIBs en el dispositivo de salida.
QUERY_ESCSUPPORT Consulta al controlador de impresora para determinar si una función de escape WMF específica es compatible con el dispositivo de salida.
SET_COLORTABLE Establece valores de mesa de color.
SET_COPYCOUNT Establece el número de copias.
SET_LINECAP Especifica el modo de conexión para usar en el dibujo al dispositivo de salida.
SET_LINEJOIN Especifica el modo de unión de líneas para usar en el dibujo al dispositivo de salida.
SET_MITERLIMIT Establece el límite para la longitud de miter se une para utilizar en el dibujo al dispositivo de salida.
SPCLPASSTHROUGH2 Permite que los documentos incluyan en los documentos los procedimientos privados y otros datos arbitrarios.
STARTDOC Notifica al conductor de la impresora que un nuevo trabajo de impresión está empezando.

Se encontró una vulnerabilidad importante en los registros de escape en torno al registro de escape Anular, que almacena el código del procedimiento de anulación dentro del propio registro. Esto afectó a los sistemas Windows (ver CVE-2005-4560) y al proyecto Wine (ver CVE-2006-0106). Según Secunia, "La vulnerabilidad se debe a un error en el manejo de los archivos de metarchivo de Windows ('.wmf') que contienen SETABORTPROC 'Escape' registros. Dichos registros permiten que se ejecute una función arbitraria definida por el usuario cuando falla la representación de un archivo WMF." Según la documentación del SDK de Windows 3.1, el escape SETABORTPROC quedó obsoleto y fue reemplazado por la función del mismo nombre en Windows 3.1, mucho antes de que se descubriera la vulnerabilidad WMF. Sin embargo, el código de escape obsoleto se mantuvo por compatibilidad con programas de 16 bits escritos para (o al menos compatibles con versiones anteriores) de Windows 3.0. Este cambio ocurrió aproximadamente al mismo tiempo que Microsoft estaba creando la reimplementación de 32 bits de GDI para Windows NT, y es probable que la vulnerabilidad ocurriera durante este esfuerzo.

Después de que Steve Gibson acusara a Microsoft de implementar deliberadamente una puerta trasera en su código, Mark Russinovich proporcionó una refutación y afirmó que:

...las cosas eran diferentes cuando el formato era arquitecto. En el código de memoria "grande" de Windows 3.1 es inherentemente independiente de ubicación y Windows nunca fue parcheado, por lo que Windows y una aplicación simplemente podría copiar una función de aplicación en el archivo WMF y asumir que funcionaría cuando se reproduce de nuevo por la misma aplicación en una sesión de ejecución posterior. En cualquier caso, no está claro que los desarrolladores imaginaran aplicaciones creando metafiles on-disk con procedimientos abortados. Además, como señaló Stephen Toulouse de Microsoft en la refutación de Microsoft a las afirmaciones de Steve, el paisaje de seguridad a principios de los años noventa era muy diferente de hoy y todo el código, incluyendo el almacenado en un archivo WMF, era inherentemente confiable.

Peter Ferrie de Symantec Security Response, EE. UU., tampoco estuvo de acuerdo con Gibson y señaló que:

Gibson afirmó que se crea un hilo para ejecutar el manipulador SetAbortProc. De hecho, ningún hilo se crea para ejecutar el manejador – es un callback, que es llamado por el parser, y el parser tiene que esperar hasta que el callback regrese, de lo contrario todo el punto de la función (para abortar la impresión) se pierde. Por su propia admisión, Gibson no leyó la documentación (de hecho, afirmó que no podía encontrarla, aunque está disponible libremente en el sitio web de Microsoft), y afirmó que el contexto del dispositivo no está disponible para el manejador de funciones. Por supuesto, el contexto del dispositivo está disponible para el manejador de funciones — es uno de los dos parámetros que se le pasa (ver arriba), y se requiere para abortar la impresión. Finalmente, Gibson afirmó que el flujo de control no podía regresar a Windows. Es simplemente una cuestión de la función que regresa y descarta los parámetros que se pasaron en la pila. Si el registro está bien formado, Windows seguirá analizando el archivo, como antes.... Gibson admite que estaba adivinando algunas cosas. Desafortunadamente, adivinó mal. Supongo que ahora lo sabemos mejor.

CEM

Windows mejorado Metafile headers

Los archivos EMF tienen tres posibles versiones de encabezados. Los encabezados originales son solo un contenedor de imágenes, la segunda y la tercera versión encapsulan el encabezado original y contienen un registro en formato de píxel y soporte para registros OpenGL, y la tercera versión encapsula la extensión del segundo encabezado y aumenta la precisión y la escalabilidad de los EMF a medida que agrega la capacidad de medir distancias de superficies de dispositivos utilizando el sistema métrico.

Cada encabezado EMF comienza con un registro EMR_HEADER y registra las propiedades relevantes del dispositivo en el que se registró la imagen del metarchivo. El encabezado EMF original tiene un encabezado de 80 bytes y una cadena de descripción de longitud variable opcional. Otros metarchivos contienen campos de extensión, que encapsulan el encabezado original. EmfMetafileHeaderExtension1 es un registro que se inserta directamente después del encabezado EMF original, especifica si hay un descriptor de formato de píxel y el desplazamiento del objeto descriptor dentro del encabezado, así como un campo que especifica si los registros OpenGL existen en el metarchivo. El descriptor de formato de píxel especifica las capacidades de la superficie de dibujo y si un píxel está codificado en RGBA o es un índice en una tabla de colores. EmfMetafileHeaderExtension2 es un registro que se inserta directamente después del registro EmfMetafileHeaderExtension1 y contiene dos campos con los valores X e Y para medir la superficie del dispositivo en micrómetros.

Al igual que los archivos WMF, los registros se pueden clasificar por función; sin embargo, hay más tipos de registro en los archivos EMF que en los archivos WMF. Los registros se pueden clasificar como registros de control, mapa de bits, recorte, comentario, dibujo, escape, creación de objetos, manipulación de objetos, OpenGL, soporte de ruta, estado y transformación.

CEM+

Con el lanzamiento de Windows XP, se introdujo el formato Formato de metaarchivo mejorado más extensiones (EMF+). EMF+ proporciona una forma de serializar llamadas a la API de GDI+ de la misma manera que WMF/EMF almacena llamadas a GDI.

También hay versiones comprimidas de metarchivos de Windows conocidas como metarchivo de Windows comprimido (WMZ) y metarchivo mejorado de Windows comprimido (EMZ), que son básicamente WMF y EMF comprimidos con gzip. archivos correspondientemente.

Implementaciones

El formato WMF fue diseñado para ser ejecutado por la capa GDI de Windows para restaurar la imagen, pero como los archivos binarios WMF contienen la definición de las primitivas gráficas GDI que constituyen esta imagen, es posible diseñar bibliotecas alternativas que renderice archivos binarios WMF o conviértalos a otros formatos gráficos.

Contenido relacionado

Microsoft Windows

Filigrana

Ferrocarril del Pacífico Central

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save