Herd Software Entwicklung
DaVinci Grafikbibliothek
DaVinci Dokumentation
Leonardo: Funktion CreateFIRFilteredDIBDie Leonardo-Funktion CreateFIRFilteredDIB erzeugt ein gefiltertes Abbild einer DIB mit 24 Bit Farbtiefe.
HDIB FAR PASCAL CreateSharpenedDIB(
HDIB hdib,
LPINT matrix,
int width,
int height,
int addtoaverage
);
hdib HDIB Handle der Quell-DIB.
Die Quell-DIB muß eine TrueColor DIB mit 24 Bit Farbtiefe sein.
matrix LPINT Zeiger auf ein Array von (width * height) integer-Werten mit Multiplikationsfaktoren für die Pixel der Bitmap.
Der Wert 256 entspricht einem Multiplikationsfaktor von 1.0
width int Breite der Multiplikationsmatrix
Dieser Wert muß ungerade (nicht ohne Rest durch 2 teilbar) sein.
height int Höhe der Multiplikationsmatrix
Dieser Wert muß ungerade (nicht ohne Rest durch 2 teilbar) sein.
addtoaverage int Konstanter Wert, der zu jedem Pixel in der Matrix addiert werden soll.
Der Rückgabewert gibt das Handle der neu erstellten DIB an. Er ist NULL, wenn die Erstellung der DIB mißlang. Das Handle muß von der Applikation mit der Funktion GlobalFree freigegeben werden.
Diese Funktion führt eine lineare zweidimensionale FIR-Filterung der Farbwerte der Eingabe-DIB in die Ausgabe-DIB durch.
Beispiel: Matrix zum Scharfzeichnen
Eine Multiplikations-Matrix hat 9 Filterkoeffizienten. Die Multiplikationsmatrix hat eine Höhe von 3 Pixeln (height=3) und eine Breite von 3 Pixeln (width=3).
static int SharpenMatrix[9] =
{ 0, -64, 0,
-64, 512, -64,
0, -64, 0 };
Da DIB-Daten im Speicher im mathematischen Koordinatensystem abgelegt werden (d.h. Y=0 ist am unteren Rand, nicht am oberen), wird die erste Zeile der Matrix auf die unterste Zeile der Bitmap angewendet.
|
p[x-1,y-1] p[x-1,y] p[x-1,y+1] |
p[x,y-1] p[x,y] p[x,y+1] |
p[x+1,y-1] p[x+1,y] p[x+1,y+1] |
Das obige Beispiel kennzeichnet eine Filtermatrix zum Scharfzeichnen. Der Wert eines Pixels wird verdoppelt (512 entspricht 2.0) und jeweils ein Viertel der Werte der Nachbarpunkte werden subtrahiert.
static int BlurrMatrix [9] =
{ 0, 32, 0,
32,128, 32,
0, 32, 0 };
/* CreateSharpenedDIB
*
* Computes a new TrueColor DIB from a given TrueColor 24-Bit DIB
* with sharpened Image
*/
static int SharpenMatrix[9] =
{ 0, -64, 0,
-64, 512, -64,
0, -64, 0 };
HDIB API CreateSharpenedDIB(HDIB hDib)
{ return CreateFIRFilteredDIB(hDib, SharpenMatrix, 3, 3, 0);
}