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


Datenquellen und Datensenken (Streams)

Kompression von Bilddaten

Die DaVinci-Bibliothek eignet sich dank der besonderen Eigenschaften, der unterstützten Datenformate nicht nur als Konverter für Datenformate, sondern auch ganz hervorragend zur Kompression von Bilddaten.

Das Dateformat JPEG eignet sich besonders zur Kompression von Echtfarbbilder wie Fotografien, das TIFF-Datenformat bietet gute Kompressionsunterstützung für Skizzen und dank der Fax G3/G4-Technik eine besonders hohe Kompressionsrate für Schwarz/Weiß Grafiken.

Ablage der komprimierten Bilddaten

Bei normaler Handhabung entnimmt DaVinci die Bilddaten einer Datei und speichert komprimierte Bilddaten wieder als Datei ab. Für Anwendungen der Bildarchivierung unterstützt DaVinci aber auch eine streaming Technologie, mit deren Hilfe Sie die Daten ohne einen Umweg über eine Datei direkt in Ihrer Applikation bearbeiten können.

Die MMSYSTEM.DLL / WINMM.DLL von Microsoft Windows

Dazu bedient sich DaVinci der Bibliothek MMSYSTEM.DLL (Bei 32-Bit WINMM.DLL) die ein Grundbestandteil von Microsoft Windows ist und entsprechende Streaming-Funktionen bietet. Diese stellt drei Technologien zur Verfügen:

Memory-Files

MMSYSTEM erlaubt das Öffnen eines Speicherbereichs als HMMIO Datei-Handle. Dazu wird die Funktion mmioOpen mit einer geeignet vorbereiteten MMIOINFO-Struktur aufgerufen: Siehe auch “Performing Memory File I/O” der WIN32 API

Zum Lesen (Import) aus dem Hauptspeicher
Zum Import kann ein beliebiger Speicherbereich benutzt werden.
#include <mmsystem.h>

MMIOINFO mmioInfo;
memset(&mmioInfo, 0, sizeof(MMIOINFO));

   mmioInfo.pchBuffer = lpBuffer;
   mmioInfo.cchBuffer = dwBufferLength;
   mmioInfo.fccIOProc = FOURCC_MEM;
   if (NULL!=(hmmioMem = mmioOpen(NULL, &mmioInfo, MMIO_READWRITE)))
   {
      lpDavParams->hmmio = hmmioMem;

      // .... DaVinci Importvorgang

      mmioClose(hmmioMem, 0);
      lpDavParams->hmmio = NULL;
   }
Zum Schreiben (Export) in den Hauptspeicher
Das Schreiben ist etwas komplizierter, da die Dateigröße der exportierten Daten im allgemeinen nicht feststeht.
MMIOINFO mmioInfo;
memset(&mmioInfo, 0, sizeof(MMIOINFO));

   mmioInfo.adwInfo   = 0x20000L;
   mmioInfo.fccIOProc = FOURCC_MEM;
   if (NULL!=(hmmioMem = mmioOpen(NULL, &mmioInfo, MMIO_READWRITE)))
   {
      lpDavParams->hmmio = hmmioMem;

      // .... DaVinci Exportvorgang

      mmioGetInfo(lpDavParams->hmmio, &mmioInfo, 0);

      // .... Blockzeiger und -größe stehen nun in mmioInfo

      mmioClose(hmmioMem, 0);
      lpDavParams->hmmio = NULL;
   }

Streaming mit einem Callback

Dazu meldet Ihre Applikation bei MMSYSTEM durch den Aufruf der Funktion mmioInstallIOProc ein Dateisystem an. Dies geschieht normalerweise beim Start der Applikation.

Das Dateisystem wird dabei im Wesentlichen durch einen 4-Zeichen-Code und eine Callback-Funktion gekennzeichnet:
extern "C"
LRESULT CALLBACK _export mmioProc(

    LPSTR  lpmmioinfo,	// address of structure with file information
    UINT  uMsg,	// specifies sent message
    LONG  lParam1,	// application-defined parameter
    LONG  lParam2	// application-defined parameter
   )
{ return 0;
}
  mmioInstallIOProc(mmioFOURCC('D','G','X',' '), &mmioProc, MMIO_INSTALLPROC);

DGX ist dabei nur ein Beispiel, Sie können jeden beliebigen Namen angeben. MMSYSTEM berücksichtigt das installierte Dateissystem, wenn eine Datei mit folgender Schreibweise eröffnet werden soll:

PFADNAME\DATEINAME.DGX+NAME.EXT.

D.h. der FOURCC-Parameter gibt die Extension einer physischen DOS-Datei an, z.B. den Namen des Bildarchives. Anschließend folgt ein + - Zeichen und der Name des Bildes innerhalb des Archives.

Den beim Aufruf der DaVinci-Funktion ipImportInd übergebenen Dateinamen verwendet DaVinci bei einem Aufruf der Funktion mmioOpen der MMSYSTEM.DLL. Diese erkennt, daß für diesen Namen ein installiertes Dateisystem vorliegt und ruft die von der Applikation bereitgestellt callback-Routine mit der Nachricht MMIOM_OPEN auf.

Hier kann die Applikation nun die zu bearbeitenden Daten aus der Datenbank entnehmen.

Der zum Öffnen benutzete DOS-Dateiname muß nicht existieren, es genügt, wenn die Dateiname mit “.DBX” endet.

Anmerkungen

Visual C++ Programme müssen die zusätzliche LIB-Datei WINMM.LIB binden, um die WINMM.DLL einzusetzen.