Herd Software Entwicklung
DaVinci Grafikbibliothek
DaVinci Dokumentation
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 mehr Wert auf Darstellungsqualität als auf Geschwindigkeit gelegt wird.
HDIB FAR PASCAL ScaleToGray(
HDIB hDIB,
int cxDest,
int cyDest,
LPRECT rc
DWORD dummy);
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 muß > 0 sein.
cyDest Höhe der neu zu erstellenden DIB in Pixeln. Dieser Wert muß > 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, daß left > right bzw. bottom > top ist.
dummy Dieser Parameter ist zur Nutzung in einer späteren Version von Davinci reserviert.
Beispiel:
| Verarbeitung mit StretchDIB Maßstab 1:3 | Verarbeitung mit ScaleToGray Maßstab 1:3 |
![]() |
![]() |
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 muß 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).
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.
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 daß 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.
Da ScaleToGray jedes Pixel der Quell-Bitmap mindestens einmal durchrechnen muß, 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: