| |
|
|
Sven Bader | Hier Yo una Code para una Weichzeichen-Filter, de Performance-Gründen más para kleine Gráficos geeignet.
Über el dritten Parámetro el Blur-Función lässt se steuern, como oft el Filter angewendet se.
Proc Blur
Parámetros width&, height&, passes&
Declarar avg_red&, avg_green&, avg_blue&, new_image&[width&-1, height&-1, 2]
Declarar count&, box&, x&, y&, i&, j&
whileLoop passes&
box& = 1
WhileLoop 0, width& - 1
i& = &bucle
WhileLoop 0, height& - 1
j& = &bucle
clear avg_red&, avg_blue&, avg_green&, count&
WhileLoop (i& - box&), (i& + box&)
x& = &bucle
Case (x& = width&) : Romper
Case (x& < 0) : Continue
WhileLoop (j& - box&), (j& + box&)
y& = &bucle
caso (y& = height&) : Romper
caso (y& < 0) : Continue
inc count&
avg_red& = avg_red& + image&[x&, y&, 0]
avg_green& = avg_green& + image&[x&, y&, 1]
avg_blue& = avg_blue& + image&[x&, y&, 2]
EndWhile
EndWhile
new_image&[i&, j&, 0] = avg_red& / count&
new_image&[i&, j&, 1] = avg_green& / count&
new_image&[i&, j&, 2] = avg_blue& / count&
EndWhile
EndWhile
MAT image&[] = new_image&[]
EndWhile
ENDPROC
Cls
Declarar x&, y&, px&, width&, height&
'===================== Bild en Array einlesen
DrawIcon "EIS", 50, 50
width& = 32
height& = 32
Declarar image&[width&-1, height&-1, 2]
WhileLoop 0, height& - 1
y& = &bucle
WhileLoop 0, width& - 1
x& = &bucle
px& = GetPixel(50 + x&, 50 + y&)
image&[x&, y&, 0] = GetRValue(px&)
image&[x&, y&, 1] = GetGValue(px&)
image&[x&, y&, 2] = GetBValue(px&)
EndWhile
EndWhile
'===================== Filter anwenden
Blur(width&, height&, 5)
'===================== geglättetes Bild Mostrar
WhileLoop 0, height& - 1
y& = &bucle
WhileLoop 0, width& - 1
x& = &bucle
SetPixel 100 + x&, y& + 50, RGB(image&[x&, y&, 0], image&[x&, y&, 1], image&[x&, y&, 2])
EndWhile
EndWhile
WaitKey
End
Der Flaschenhals es hier no una vez el Filter incluso (wobei el auch) pero el GetPixel y SetPixel. Umgehen podría al para Ejemplo una 24-Bit-Mapa de bits-Expediente, el uno como Block einliest.
Ein qualitativer Tweak wäre, el Función sólo una Teilbereich glätten que se, el Ränder aber trotzdem en el Array vorzuhalten. Dann würden el Randbereiche no así abgehackt aussehen. Hierzu debería una continuación el 4 Case-Abfragen entfernen y el x/y-Offset como Parámetro mitgeben.
Viel Spaß beim Glätten |
|
|
| |
|
|