Directory Contents Search << >>


DaVinci 4: Leonardo: Funktion Funktion ScaleToGray (Größenskalieren/Spiegeln/Ausschneiden bei optimierter Darstellung)

Diese Funktion ähnelt in Parametern und Arbeitsweise der Funktion StretchDIB. Sie dient dazu, ein verkleinertes Abbild einer Grafik zu erzeugen, wobei durch Berücksichtigung von Anti-Aliasing mehr Wert auf Darstellungsqualität als auf Geschwindigkeit gelegt wird.

HDIB WINAPI ScaleToGray(

HDIB

hDIB,

int

cxDest,

int

cyDest,

LPRECT

rc

DWORD

dwFlags);

hDIB

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

Das übergebene Handle bleibt gültig.

cxDest

Breite der neu zu erstellenden DIB in Pixeln. Dieser Wert muss > 0 sein.

cyDest

Höhe der neu zu erstellenden DIB in Pixeln. Dieser Wert muss > 0 sein.

rc

Zeiger auf eine RECT-Struktur mit Angaben zur Lage des gewünschten Ausschnitts aus hDIB.

Dieser Wert darf NULL sein, wenn die Eingabe-DIB vollständig verarbeitet werden soll.

Um das Abbild zu spiegeln, kann die Rechteck-Struktur so ausgefüllt werden, dass left > right bzw. bottom > top ist.

dwFlags

Flagwert für zusätzliche Optionen. Standardwert ist 0

SCALETOGRAY_MULTITHREAD

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

Beispiel:

Verarbeitung mit StretchDIB Maßstab 1:3

Verarbeitung mit ScaleToGray Maßstab 1:3

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 eine Farbauflösung von 8 Bit und eine Grauwerte-Palette, wenn die übergebene DIB monochrom war (biBitCount =1).

Die zurückgelieferte DIB hat eine Farbauflösung von 24 Bit, wenn die übergebene DIB nicht monochrom war (biBitCount >1).

Anmerkungen

Die Hauptanwendung dieser Funktion ist es, eine monochrome Bitmap in der Größe am Bildschirm zu reduzieren. Während StretchDIB dabei z.B. 3 von 4 Pixeln bei der Verarbeitung ignoriert, bildet ScalteToGray einen mittleren Helligkeitswert über alle Pixel. Diese Art der Verarbeitung kommt dem menschlichen Auge sehr entgegen, das selbst bei hohen Verkleinerungsraten die verkleinerte Darstellung noch gut erkennen kann.

Bei Farbbildern kann die Qualität der Darstellung meist durch anschließendes Scharfzeichnen mittels der Funktion CreateSharpenedDIB weiter gesteigert werden.

Speicherbedarf

Die ScaleToGray-Routine benutzt nur sehr kleine temporäre Speicherblöcke. Der Speicherbedarf wird nahezu ausschließlich von den Eingabe und Ausgabe-DIBs bestimmt.

Quell-DIBs mit 1 Bit Farbtiefe können direkt verarbeitet werden. Die Ausgabe-DIB hat jedoch eine höhere Farbtiefe von 8 Bit, so dass der Speicherbedarf bei geringen Verkleinerungsraten groß werden kann. Falls die Ausgabe-DIB klein ist, fällt dies kaum ins Gewicht.

Beispiel: DIN A4 Monochrom in Fax-Auflösung auf VGA-Auflösung 640 x 480 Punkte bedarf ca. 800 KByte.

Arbeitsgeschwindigkeit

Da ScaleToGray jedes Pixel der Quell-Bitmap mindestens einmal durchrechnen muss, ist die Verarbeitung sehr langsam. Für schnelle Verarbeitung sollten Sie die Funktionen StretchDIB oder die Windows-Funktion StrechBlt benutzen.

Optimierungen:

ScaleToGray ist prinzipbedingt recht langsam. Für folgende Sonderfälle enthält die Pro-Version von DaVinci Optimierungen zur Erhöhung der Arbeitsgeschwindigkeit:

verkleinern einer DIB mit biBitCount=8, wenn sie maximal 6 graue Farbpaletteneinträge in absteigender Helligkeit aufweist (Index 0 = Weiß) und der Prozessor Unterstützung für AVX2 Instruktionen bietet und die Skalierung nicht kleiner als im Verhältnis 1:256 erfolgt.

verkleinern einer DIB mit biBitCount=8, wenn sie maximal 6 graue Farbpaletteneinträge in absteigender Helligkeit aufweist (Index 0 = Weiß) und der Prozessor Unterstützung für SSE2 Instruktionen bietet und die Skalierung nicht kleiner als im Verhältnis 1:256 erfolgt..

verkleinern einer DIB mit biBitCount=8, wenn die Farbpalette 256 Helligkeitswerte nach dem Schema DIBPALETTE_GRAYMINISWHITE oder DIBPALETTE_GRAYMINISWHITE aufweist und der Prozessor Unterstützung für SSE2 Instruktionen bietet und die Skalierung nicht kleiner als im Verhältnis 1:256 erfolgt..

verkleinern einer DIB mit biBitCount=24 oder biBitCount=32, wenn der Prozessor Unterstützung für SSE2 Instruktionen bietet und die Skalierung nicht kleiner als im Verhältnis 1:256 erfolgt..

verkleinern einer monochromen DIB Im Maßstab exakt 1:2

verkleinern einer monochromen DIB in beliebigem Maßstab

-


Valid HTML 4.01!