Mnoho programů na úpravu obrázků má filter s názvem Soften, česky bychom řekli rozostření...
Rozostření funguje na primitivním principu. Jako základní hodnotu si vezmeme bod se kterým budeme pracovat jako se základním a jako hodnoty, dejme tomu dodatkové, budeme používat čtyři okolní pixely, takže námi vybrané pole bude takové plus. Tyto body budeme v různých poměrech míchat a tím nám vyjde určitá síla rozostření.
Kód je psán spíše pro názornost než pro výkon.
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 Soften(Img As PictureBox, img2 As PictureBox, Value As Integer, Procenta As Integer)
Img.DrawWidth = 1
Img.ScaleMode = 3
Img.AutoRedraw = True
img2.DrawWidth = 1
img2.ScaleMode = 3
img2.AutoRedraw = True
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)
b5 = ImgP rgbmax rgbmax
g5 = (ImgP rgbmax) Mod rgbmax
r5 = ImgP Mod rgbmax
ImgP = GetPixel(Img.hdc, x, y + Value)
b6 = ImgP rgbmax rgbmax
g6 = (ImgP rgbmax) Mod rgbmax
r6 = ImgP Mod rgbmax
ImgP = GetPixel(Img.hdc, x - Value, y)
b7 = ImgP rgbmax rgbmax
g7 = (ImgP rgbmax) Mod rgbmax
r7 = ImgP Mod rgbmax
ImgP = GetPixel(Img.hdc, x, y - Value)
b8 = ImgP rgbmax rgbmax
g8 = (ImgP rgbmax) Mod rgbmax
r8 = ImgP Mod rgbmax
r = ((r0 * 100) + ((r5 + r6 + r7 + r8) * Procenta)) / (100 + (4 * Procenta))
g = ((g0 * 100) + ((g5 + g6 + g7 + g8) * Procenta)) / (100 + (4 * Procenta))
b = ((b0 * 100) + ((b5 + b6 + b7 + b8) * Procenta)) / (100 + (4 * Procenta))
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 Soften(Picture1, Picture2, 1, 100)
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, vyšší již způsobují jiný efekt) a poslední parametr určuje procentuelní podíl hodnot, na kterých je výsledek závislý. Celkem solidního rozostření dosáhneme kombinací 2 a 100.