Directory Contents Search << >>


DaVinci 4: Struktur METARESOLUTION

Die METARESOLUTION - Struktur enthält Zusatzangaben zu Windows MetaFiles über die Auflösung des MetaFiles (Größe in Millimetern und das Verhältnis zwischen Breite und Höhe). Diese Angaben sind in einer Windows MetaFile HMETAFILE leider nicht gespeichert und müssen daher von der Anwendung getrennt verwaltet werden. Das übliche Dateiformat mit der Kennung .WMF enthält dazu einen kleinen Header, der die in der METARESOLUTION-Struktur zusammengefassten Daten enthält.

Für Enhanced MetaFiles ist diese Struktur nicht notwendig, da die Anwendung die Auflösung mit der API Funktion GetEnhMetaFileHeader erfragen kann.

METARESOLUTION ist definiert in der Datei DAVINCI.H. Falls die importierte Datei eine Metafile-Datei ist (WMF, DXF oder von einem FLT-Filter) enthält diese Struktur Angaben über die Größe des Bildes in cm und das Seitenverhältnis zwischen Höhe und Breite.

typedef struct

{

RECT

bbox;

WORD

inch;

char

reserved[2];

} METARESOLUTION, *LPMETARESOLUTION;

Die METARESOLUTION-Struktur hat folgende Felder:

Feld

Typ

Beschreibung

bbox

RECT

das kleinste Rechteck in Metafile-Koordinaten, das die Grafik gerade noch umschließt,

inch

WORD

Skalierungsfaktor: Metafile-Einheiten (in bbox) je Inch,

reserved

char[2]

reserviert für zukünftige Definition. Bringt die METARESOLUTIONS-Struktur auf eine Compiler-Alignment Neutrale Länge.

Anmerkungen

Zum Austausch zwischen Anwendungen bestimmte MetaFiles sollten immer den Skalierungsmodus MM_ANISOTROPIC verwenden und die Größe des logischen Koordinatensystems mit SetWindowExtEx und SetWindowOrgEx setzen.

Das Element bbox der METARESOLUTION-Struktur enthält üblicherweise dieselben Angaben wie die Angaben in SetWindowExtEx und SetWindowOrgEx, lediglich als RECT-Element formuliert.

Umrechnungen

METARESOLUTION in Pixel

Vor dem Abspielen eines MetaFiles muss die Anwendung mit SetViewportExtEx und SetViewportOrgEx die Größe des Ausgabebereiches im DC festlegen. Dazu müssen die Angaben in der METARESOLUTION-Struktur mit der Auflösung des Ausgabe-DCs in Pixel je Inch verrechnet werden. Obwohl die METARESOLUTION-Struktur die Angabe von Auflösung und Position eines MetaFiles zuläßt, wird die Zielkoordinate meist von der Anwendung vorgegegeben.

Beispiel: Ausgabe auf einen Drucker.

LPMETARESOLUTION lpmr;

HDC hPrinterDC;

RECT rcPrinter;

POINT PrinterPixelPerInch;

PrinterPixelPerInch.x = GetDeviceCaps(hPrinterDC, LOGPIXELSX);

PrinterPixelPerInch.y = GetDeviceCaps(hPrinterDC, LOGPIXELSY);

rcPrinter.left = MulDiv( PrinterPixelPerInch.x, lpmr->bbox.left , lpmr->inch);

rcPrinter.top = MulDiv( PrinterPixelPerInch.y, lpmr->bbox.top , lpmr->inch);

rcPrinter.right = MulDiv( PrinterPixelPerInch.x, lpmr->bbox.right , lpmr->inch);

rcPrinter.bottom = MulDiv( PrinterPixelPerInch.y, lpmr->bbox.bottom, lpmr->inch);

SetMapMode(hPrinterDC, MM_ANISOTROPIC);

SetViewportExtEx(hPrinterDC, rcPrinter.right-rcPrinter.left, rcPrinter.bottom-rcPrinter.top, NULL);

SetViewportOrgEx(hPrinterDC, rcPrinter.left , rcPrinter.top , NULL);

METARESOLUTION in Zehntel Millimeter (HIMETRIC)

Die Auflösungsangaben in der METARESOLUTION Struktur sind in Pixel je Inch gespeichert. Beim Umrechnen muss berücksichtigt werden, dass ein Inch = 25.4 Millimeter entspricht.

Beispiel: Umrechnung in 1/10 Millimeter

SIZE size10mm;

size10mm.cx = MulDiv( lpmr->bbox.right-lpmr->bbox.left, 254, lpmr->inch);

size10mm.cy = MulDiv( lpmr->bbox.bottom-lpmr->bbox.top, 254, lpmr->inch);

-


Valid HTML 4.01!