Programmieren mit C++

Code-Beispiele & Lösungen

Klassen für allgemeine Aufgaben

Funktionen und Datenstrukturen der Grafikimport- und -exportfilter

Jeder Grafikfilter enthält mindestens zwei exportierte Funktionen. Diese haben einen festgelegten Namen, anhand derer sie adressiert werden können. Eine Adresseierung über den Index sollte man tunlichst unterlassen, da die Index-Nummer nicht einheitlich ist.

WORD CALLBACK GetFilterInfo (
    WORD            wVersion, 
    LPCSTR          lpszIni, 
    HPREFMEM FAR *  lphPrefMem, 
    HFILETYPES FAR *lphFileTypes);

GetFilterInfo ermittelt die Filterart und liefert ein Handle auf eine PREFMEM-Struktur zurück. Diese Struktur braucht der aufrufende Prozeß nicht zu kennen, da sie je nach Filter unterschiedlich sein kann. Die Filter greifen intern auf diese Daten zu. Dafür wird die Struktur bei der Initialisierung mit den Default-Werten vorbelegt und über den Konfigurationsdialog, falls vorhanden, überschrieben.

Funktion GetFilterInfo

lpszIni und lphFileType werden zur Zeit nicht benutzt und enthalten NIL bzw. eine Dummy-Variable. In wVersion wird zur Zeit immer 0 übergeben.

Über das Funktionsergebnis kann die Art des Filters identifiziert werden. Es gelten folgende Konventionen:

Wert

Filterart

1

Text-Import-Filter

2

Grafik-Import-Filter

4

Grafik-Export-Filter

Standard-Rückgabewerte

WORD CALLBACK GetFilterPref(
    HINSTANCE  hInst,
    HWND       hWindow,
    HPREFMEM   lpPrefMem,
    WORD       dummy);

GetFilterPref wickelt den Konfigurationsdialog ab. Dazu muß die Funktion mit dem Instanz-Handle und einem Handle auf das Elternfenster für den Dialog versorgt werden. lpPrefMem ist ein Handle auf die HPREFMEM-Struktur, die von der Funktion GetFilterInfo angelegt wurde.

Als Ergebnis liefert die Funktion den Status des Dialogs, also ok oder abgebrochen.

Funktion GetFilterPref

WORD CALLBACK ImportGR (
    HDC        hdc, 
    LPFILESPEC lpFileSpec, 
    LPPICINFO  lpPicInfo, 
    HPREFMEM   hPrefMem);

ImportGR liest eine Datei ein und liefert ein Handle auf ein Metafile zurück. War die Ausgangsgrafik eine Bitmap, so wird diese über ein BitBlt() in das Metafile eingebunden.

Für den Import wird ein Kontext benötigt, der jedoch ein reiner Informationskontext sein darf, da die Filter diesen DC nur zur Information über die Beschaffenheit des Ausgabegeräts benutzen.

Die Übergabe der Bilddaten erfolgt in einer PicInfo-Struktur, die wie folgt definiert ist:

Funktion ImportGR

typedef struct tagPICINFO {
    HMETAFILE hmf;
    RECT      rcBoundingBox;
    WORD      wScale;
} PICINFO;
typedef PICINFO FAR * LPPICINFO;

Das im Element hmf gelieferte Metafile kann direkt ausgegeben werden. Die Größe des Metafile in virtuellen Koordinaten ist in rcBoundingbox abgelegt. Damit wird es möglich, das Metafile proportions- und größengerecht abzubilden. In wScale ist die Auflösung des Metafiles in dpi abgelegt. Allerdings ist dieser Wert nicht immer zuverlässig, da er aus der Grafik gewonnen werden muß Grafiken und nicht immer korrekte Werte enthalten. Meist ist wScale 1000 oder 1200 für Vektorgrafiken und 96 für Rastergrafiken.

Struktur PICINFO

Die Grafikfilter können eine Datei neu öffnen, was wohl der Regelfall ist, oder ab einer vorgegebenen Dateiposition lesen. In diesem Fall müssen das Dateihandle und die Leseposition in den Elementen hfFile und dwFilePos der Struktur FileSpec übergeben werden. Diese Struktur besitzt folgenden Aufbau:

Übergabe der Dateiinformationen

typedef struct tagFILESPEC {
    WORD   fFlags;
    DWORD  dwFileType;
    HFILE  hfFile;
    char   szFileName[124];
    DWORD  dwFilePos;
} FILESPEC;
typedef FILESPEC FAR * LPFILESPEC;

In fFlags und dwFileType kann man immer 0 eintragen. szFileName enthält den Dateinamen der zu lesenden Grafikdatei.

Als Ergebnis liefert die Funktion den Wert 0, wenn die Grafik korrekt eingelesen wurde.

Struktur FileSpec

WORD CALLBACK ExportGR (
    HDC        hdc, 
    LPFILESPEC lpFileSpec, 
    LPPICINFO  lpPicInfo, 
    HPREFMEM   hPrefMem);

Die Funktion ExportGR ist nur in Grafik-Export-Filtern anstelle der Funktion ImportGR enthalten. Der Aufruf erfolgt analog zu ImportGR, jedoch mit dem Unterschied, daß die PICINFO-Struktur bereits ausgefüllt ist. hmf muß auf ein Metafile zeigen. rcBoundingbox und wScale sollten korrekt ausgefüllt sein, da sie wiederum als Import-Informationen für ein späteres Lesen verwendet werden.

Funktion ExportGR





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 02:11:38 von textarchiv.alojado.de