Die Funktion TransformDIB überführt die Bildinhalte einer Quell-DIB in eine Ziel-DIB. Mittels zweier durch die Applikation bereitgestellter Callback-Funktionen kann die Applikation während des Kopiervorganges Koordinaten- und Farbtransformationen ausführen.
BOOL WINAPI TransformDIB( |
||
HDIB |
hDibSource, |
|
HDIB |
hDibDest, |
|
FNTRANSFORMPOINT |
fnPoint, |
|
FNTRANSFORMCOLOR |
fnColor, |
|
LONG |
lParam, |
|
COLORREF |
clBkColor |
|
); |
||
hDIBSource |
Handle der Quell-DIB. Es darf sich um eine DIB mit 1,4,8,16,24,32 oder 48 Bit Farbtiefe handeln. |
|
Das übergebene Handle bleibt gültig. |
||
hDIBDest |
Handle der Ziel-DIB. Es darf sich um eine DIB mit 1,4,8,16,24,32 oder 48 Bit Farbtiefe handeln. |
|
Das übergebene Handle bleibt gültig. |
||
Quell- und Ziel-DIB dürfen sich in der Farbtiefe unterscheiden. |
||
fnPoint |
Von der Applikation bereitgestellte Callback-Funktion zur Koordinatentransformation oder NULL, wenn keine Koordinatentransformation benötigt wird. |
|
fnColor |
Von der Applikation bereitgestellte Callback-Funktion zur Farbtransformation oder NULL, wenn keine Farbtransformation benötigt wird. |
|
lParam |
Freier Zusatzparameter zur Weitergabe an die Callback-Funktionen. |
|
clBkColor |
Farbe für Punkte, die bei der Koordinatentransformation in einen ungültigen Bereich verweisen. |
|
Vergleiche Windows API RGB-Makro und COLORREF bzw TColorRef Typ.. |
||
Der Sonderwert -1 (0xFFFFFFFFL) bedeutet. Keine Beeinflussung erwünscht. |
||
Rückgabewert: |
||
Der Rückgabewert ist TRUE, wenn die Transformation erfolgreich abgeschlossen wurde. Er ist FALSE, wenn ein Problem erkannt wurde. |
||
Arbeitsweise: |
||
Die Funktion TransformDIB entnimmt die Daten der Quell-DIB pixelweise und trägt sie in die Ziel-DIB ein. |
||
Für jedes Pixel, die Ziel-DIB, wird der zugehörige Farbwert bestimmt. |
||
Folgende Schritte werden für jedes Pixel ausgeführt: |
msg |
Beide Callback-Funktionen werden von TransfromDIB zu Beginn und Ende der Verarbeitung aufgerufen, wobei der Parameter msg Auskunft über die Aktion gibt: |
lppt |
Zeiger auf eine POINT-Struktur mit den Koordinaten des zu transformierenden Punktes. NULL bei TRFM_INIT und TRFM_EXIT, |
|
lParam |
lParam-Wert wie beim Aufruf von TransformDIB. Hier kann die Applikation die Adresse oder Referenz zu einem Datenobjekt ablegen. |
|
TransformPoint: |
||
Rückgabewert: |
||
TRUE: |
das Pixel (TRFM_PIXEL) bzw. die Zeile (TRFM_LINE) wird von der Quellkoordinate in die Zielkoordinate übertragen, |
|
FALSE: |
das Pixel (TRFM_PIXEL) bzw. die Zeile (TRFM_LINE) im Ziel-Koordinatensystem wird nicht beeinflußt. |
|
Die gewünschten Quell-Koordinaten speichert die Applikation in die durch lppt adressierte POINT-Struktur ein. |
||
TransformColor: |
||
lprgbq16 |
Farbwert als RGBQUAD16 des Pixels in der Quell-DIB und nach der Transformation Ziel-DIB. |
|
Rückgabewert: TRUE, falls das Pixel übertragen werden soll, FALSE, falls das Pixel nicht übertragen werden soll. |
||
Beispiele |
||
1. Im Beispielprogramm DAVDEMO.CPP finden Sie eine Beispiel-Anwendung von TransformDIB zur Umwandlung einer DIB in monochrome Darstellung mit fließender Mittelwertentscheidung. |
||
2. Ein unerwünschter Effekt der Funktion DIBRotate ist, dass sie bei großen DIBs recht lange dauert. Die Funktion kann aber nicht auf Teile einer DIB angewendet werden, daher scheint der Rechner in der Zwischenzeit "tot" zu sein. |
||
Daher haben wir den Quellcode der DIBRotate-Funktion in den Hilfetext aufgenommen, so dass Sie ihn an Ihre Wünsche Anpassen können. |
||