Directory Contents Search <<


DaVinci 4: DIBs mit 16 Bits je Farbkomponente (48-Bit DIBs)

TIFF und PNG-Dateien können Pixeldaten in erhöhter Genauigkeit (16 Bits je Pixel) enthalten. Die Pro-Version von DaVinci kann eine solche RGB oder Grauwerte-TIFF-Datei ohne Datenverlust importieren und exportieren. Sie erstellt daraus eine DIB mit 48 Bits / Pixel bzw. 16 Bits / Pixel (biBitCount des BITMAPINFOHEADERs = 24 bzw 8).

Um die 16-Bit Versionen einer DIB problemlos mit Microsoft Windows einsetzen zu können, werden die höheren 8 Bits der DIB kompatibel zu 8 Bit/Pixel DIBs abgelegt. Die niederen 8 Bits werden nahtlos hinter den Daten der letzten Zeile der oberen 8 Bits abgelegt. Als Kennzeichen, dass weitere DIB-Daten vorhanden sind, wird das Feld biPlanes der BITMAPINFOHEADER-Struktur auf 2 gesetzt.

Solche DIBs sind außerhalb der Microsoft Spezifikation für DIBs und können daher nur innerhalb einiger Routinen des DaVinci APIs uneingeschränkt verwendet werden.

Zur Verwendung einer solchen DIB mit Microsoft Windows API Funktionen wie SetDIBits oder CreateDIBSection muss die Anwendung vor der Ausgabe zunächst das Feld biPlanes auf 1 zurücksetzen, in manchen Fällen kann es erforderlich sein, zusätzlich den Wert von biSizeImage zu halbieren. Da diese Veränderung lediglich den BITMAPINFOHEADER der DIB betreffen, sind sie leicht und schnell durchzuführen und wieder rückgängig zu machen.

Beim Import von Grauwerte-TIFF-Dateien ist biBitCount = 8 und biPlanes =2. Die Anwendung muss die erste Farbe in der RGBQUAD-Farbpalette auf 0 prüfen um festzustellen ob 0 oder 255 ein weißes Pixel kennzeichnet.

48-Bit Voll-Kompatible DaVinci-Funktionen

Folgende Funktionen können auch die unteren 8 Bit jedes Pixels korrekt verarbeiten:

ipImportInd / ipTiff2DIB / ipPng2DIB beim TIFF und PNG-Import mit dwDIBFlag IPDIBF_ALLOW_IMPORT_48BIT

ipExportInd / ipDIB2Tiff / ipDIB2Png erzeugt daraus wieder eine TIFF bzw PNG-Datei mit 16 Bits/Pixel

SaveDIBToFile die erstellte Datei kann nur von DaVinci Pro-basierten Programmen weiterverarbeitet werden.

LoadDIBFromFile.

CreateDIB erzeugt bei BitCount = 48 eine RGB 16 Bit/Pixel DIB

CreateCompatibleDIB

CopyHandle

ScaleToGray

CreateFIRFilteredDIB

CreateSharpenedDIB

DIBRotate

die Funktionsgruppe um RWOpenDIB

StretchDIB2DIBBlt

StretchDIB

GrayDIB

GammaCorrectionApplyToDIB

TransformDIB

ConvertDIB

48-Bit teilkompatible DaVinci-Funktionen

Alle von DaVinci und Leonardo exportierten Funktionen können DIBs mit 16 Bit / Pixel zumindst insoweit verarbeiten, dass die höhertwertigen 8 Bit korrekt verarbeitet werden.

ipExportInd

DitherTo1

DitherTo4

DitherTo8

ConvertDIB

TransformDIB kann zur Umwandlung in andere Farbtiefe benutzt werden.

DIBRotate

StretchDIB

StretchDIB2DIBBlt

StretchDIBBlt

BitmapFromDIB

Adressieren von DIB-Daten

Bei einer DIB mit biPlanes der BITMAPINFOHEADER-Struktur = 2 gibt das Feld biSizeImage die Größe des Datenbereichs für MSB und LSB zusammen an, so dass biSizeImage grundsätzlich immer gerade (durch 2 teilbar) ist. Das Feld biSizeImage ist bei dieser Art von DIBs grundsätzlich niemals 0. Der Abstand zwischen den oberen 8 Bit und den unteren 8 Bit kann also durch Division von biSizeImage durch zwei erfolgen.

#ifndef MAKEWORD

#define MAKEWORD(lo, hi) ((lo)|((hi)<<8)

#endif

WORD

wRed, wGreen, wBlue;

LPBITMAPINFOHEADER lpbmi = (LPBITMAPINFOHEADER) GlobalLock(hDIB);

LPBYTE lpBitsLSB= (LPBYTE)DIBBITS(lpbmi),

lpBitsMSB= lpBitsLSB + lpbmi->biSizeImage/2;

wBlue = MAKEWORD(lpBitsLSB[0], lpBitsMSB[0]);

wGreen = MAKEWORD(lpBitsLSB[1], lpBitsMSB[1]);

wRed = MAKEWORD(lpBitsLSB[2], lpBitsMSB[2]);

// nächstes Pixel

lpBitsLSB += lpbmi->biBitCount/8;

lpBitsMSB = hpBitsLSB + lpbmi->biSizeImage/2;

wBlue = MAKEWORD(lpBitsLSB[0], lpBitsMSB[0]);

wGreen = MAKEWORD(lpBitsLSB[1], lpBitsMSB[1]);

wRed = MAKEWORD(lpBitsLSB[2], lpBitsMSB[2]);

-


Valid HTML 4.01!