Directory Contents Search << >>


DaVinci 4: Leonardo: Funktion Funktion DIBRotate (Drehen)

Windows-Versionen mit 16-Bit GDI (Windows 9X/ME) unterstützen keine Funktionen zum Drehen von Bildern, noch nicht einmal 90 Grad-Drehungen werden unterstützt. Die DIBRotate Funktion von Leonardo dreht DIBs um einen beliebigen Drehwinkel.

HDIB WINAPI DIBRotate(

HDIB

hDIB,

int

Angle,

COLORREF

clBkColor

UINT

uFlags);

hDIB

Handle der Quell-DIB. Es darf sich um eine DIB mit 1,4,8 oder 24 Bit Farbtiefe handeln.

Das übergebene Handle bleibt gültig.

Angle

Ein Ganzzahl-Wert, der den Drehwinkel in 1/1000 Grad angibt, d.h. 90000 für eine Vierteldrehung. Der Drehwinkel ist in mathematischer Drehrichtung definiert: Positive Werte drehen nach links.

clBkColor

Farbe für die beim Drehen neu entstehenden Bereiche.

Falls eine Drehwinkel <> 90, 180, 270 Grad angegeben wird, so entsteht beim Drehen eine größere Bitmap als das Original. clBkColor gibt die Farbe der neuen Bildpunkte an (0xFFFFFF für Weiß).

Vergleiche Windows API RGB-Makro und COLORREF bzw TColorRef Typ..

uFlags

Zusatzangaben zu Steuerung des Vorgangs:

DIBROTATEF_ANTIALIAS

Führt bei der Drehung eine Anti-Aliasing Berechnung durch. Die Verarbeitung wird dadurch erheblich langsamer und Speicherintensiver, aber das Verarbeitungsergebnis sieht normalerweise besser aus. Bei durch 90° teilbaren Drehwinkel ist keine entsprechende Verarbeitung notwendig uns sie wird nicht durchgeführt.

DIBROTATEF_MULTITHREAD

Benutzt für die Anti-Aliasing berechnung so viele Threads, wie der Rechner Prozessoren bzw. Cores aufweist. Auf Mehrprozessorsystemen erhöht diese Funktion den Datendurchsatz erheblich.

Rückgabewert:

Der Rückgabewert gibt das Handle der neu erstellten DIB an. Er ist NULL, falls die Funktion nicht erfolgreich ausgeführt werden konnte. Das Handle muss von der Applikation mit der Funktion GlobalFree wieder freigegeben werden.

Die zurückgelieferte DIB hat dieselbe Farbauflösung und Farbpalette wie die Quell-DIB.

Anmerkungen:

Beim Drehen um einen Winkel, der nicht vielfaches von 90 Grad ist, kann die Größe der DIB sich erheblich ändern.

Ursprüngliches Bild:

Gedrehtes Bild (Drehwinkel 30 Grad, Hintergrundfarbe: Rot)

Die Farbe der im Beispiel roten Flächen wird durch den clBkColor-Parameter vorgegeben.

Diese Funktion ersetzt die Funktion RotateDIB von DaVinci Version 3.

Speicherbedarf:

Solange das Flag DIBROTATEF_ANTIALIAS nicht gesetzt benutzt die DIBRotate-Routine benutzt nur sehr kleine temporäre Speicherblöcke. Der Speicherbedarf wird nahezu ausschließlich von den Eingabe und Ausgabe-DIBs bestimmt.

DIBs mit 1 Bit Farbtiefe können direkt verarbeitet werden, so dass zum Drehen eines ganzseitigen monochromen Bildes in Fax-Qualität ca. 500 KBytes Hauptspeicher für die beiden DIBs ausreichen.

Wenn das Flag DIBROTATEF_ANTIALIAS gesetzt ist, braucht die DIBRotate-Funktion zusätzlich noch die Summe aus dem vierfachen des Speicherplatzes für die Eingabe-DIB und dem vierfachen der Ausgabe-DIB für temporäre Zwischenergebnisse. Die Ausgabe-DIB kann zusätzlich eine höhere Farbtiefe aufweisen als die Eingabe-DIB, so dass der Speicherbedarf enorm anwachsen kann.

Optimierungen:

Für folgende Sonderfälle enthält die Pro-Version von DaVinci Optimierungen zur Erhöhung der Arbeitsgeschwindigkeit:

Drehen von monochromen DIBs (biBitCount =1) um +90, -90 oder 180°.

Drehen von DIBs mit biBitCount =8 um +90 oder -90° wenn der Prozessor Unterstützung für SSE2 Instruktionen bietet.

Drehen von DIBs mit biBitCount >=8 um +90, -90 oder 180°.

Drehen von DIBs mit beliebiger Farbtiefe um +90°, -90°.

-


Valid HTML 4.01!