Herd Software Entwicklung
DaVinci Grafikbibliothek
DaVinci Dokumentation
Datenquellen und Datensenken (Streams)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.
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.
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:
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
#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;
}
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;
}
Dazu meldet Ihre Applikation bei MMSYSTEM durch den Aufruf der Funktion mmioInstallIOProc ein Dateisystem an. Dies geschieht normalerweise beim Start der Applikation.
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.
Visual C++ Programme müssen die zusätzliche LIB-Datei WINMM.LIB binden, um die WINMM.DLL einzusetzen.