| Herd Software Entwicklung
|=
DaVinci Grafikbibliothek
|==
DaVinci Dokumentation Home Search Order


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 unter 32-Bit Windows 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, FAR *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 muß 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 muß berücksichtigt werden, daß 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);