Opačnou funkcí k funkci soften je sharpen, a to je doostření obrazu. Funguje naprosto na úplně stejném principu, jen opačně. ..
SStejně jako v minulém případě pracujeme s pěti hodnotami a od hlavní hodnoty, která je 1+n krát, odečteme součet hodnot okolních pixelů vynásobených čtvrtinou n. Znak n je koeficient zaostření. Pokud je dosazena jednička, je to přirozené zaostření, vyšší hodnoty způsobí výraznější zaostření. Nižší hodnoty způsobí nižší zaostření. Hodnota nikdy nesmí dosáhnout nuly. A to z toho důvodu, že nulou nelze dělit.
Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Sub Sharpen(Img As PictureBox, img2 As PictureBox, Value As Integer, n As Double)
Img.DrawWidth = 1
Img.ScaleMode = 3
Img.AutoRedraw = True
img2.DrawWidth = 1
img2.ScaleMode = 3
img2.AutoRedraw = True
m = (1 / n) * 4
n = n + 1
rgbmax = 256
On Error Resume Next
For x = 0 To Img.ScaleWidth - 1
For y = 0 To Img.ScaleHeight - 1
DoEvents
ImgP = GetPixel(Img.hdc, x, y)
b0 = ImgP rgbmax rgbmax
g0 = (ImgP rgbmax) Mod rgbmax
r0 = ImgP Mod rgbmax
ImgP = GetPixel(Img.hdc, x + Value, y)
b1 = ImgP rgbmax rgbmax
g1 = (ImgP rgbmax) Mod rgbmax
r1 = ImgP Mod rgbmax
ImgP = GetPixel(Img.hdc, x, y + Value)
b2 = ImgP rgbmax rgbmax
g2 = (ImgP rgbmax) Mod rgbmax
r2 = ImgP Mod rgbmax
ImgP = GetPixel(Img.hdc, x - Value, y)
b3 = ImgP rgbmax rgbmax
g3 = (ImgP rgbmax) Mod rgbmax
r3 = ImgP Mod rgbmax
ImgP = GetPixel(Img.hdc, x, y - Value)
b4 = ImgP rgbmax rgbmax
g4 = (ImgP rgbmax) Mod rgbmax
r4 = ImgP Mod rgbmax
r = (n * r0) - (r1 + r2 + r3 + r4) / m
g = (n * g0) - (g1 + g2 + g3 + g4) / m
b = (n * b0) - (b1 + b2 + b3 + b4) / m
If r >= 255 Then r = 255
If g >= 255 Then g = 255
If b >= 255 Then b = 255
If r <= 0 Then r = 0
If g <= 0 Then g = 0
If b <= 0 Then b = 0
Call SetPixel(img2.hdc, x, y, RGB(r, g, b))
Next y
DoEvents
Next x
img2.Refresh
End Sub
Volání funkce:
Call Sharpen (Picture1, Picture2, 1, 2)
Prvním parametrem je obrázek, který upravujeme, druhým je obrázek, do kterého ukládáme výsledek, třetí parametr určuje odstup vedlejších pixelů (optimální jsou zde čísla 1 – 2) a poslední parametr určuje koeficient zaostření. To je velmi důležitá hodnota a závisí na ní více, než na čemkoliv jiném, výsledek procedury. Její hodnota je v intervalu 0 až nekonečno, přičemž nula do něj nepatří. Pokud je zadané číslo menší než 1, pak je výsledné zaostření slabší, a pokud je větší než jedna, je zaostření silnější. Nesmíme to ale s tímto číslem přehánět, už u čísla 20 dostáváme opravdu silné výsledky. Takové slušné maximum je asi 4. Pokud zadáte hodnoty převrácené, bude to fungovat přesně opačně, jako rozmazání.