Embosing je jednoduše fungující efekt pracující na rozdílech hodnot vedle sebe ležících pixelů...
Jak si můžete všimnout v následujícím kódu:
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Sub Embosing(Img As PictureBox, Img2 As PictureBox)
Img.DrawWidth = 1
Img.ScaleMode = 3
Img.AutoRedraw = True
RGBMax = 256
On Error Resume Next
For x = 0 To Img.ScaleWidth
For y = 0 To Img.ScaleHeight
DoEvents
Imgp = GetPixel(Img.hdc, x, y)
b = Imgp RGBMax RGBMax
g = (Imgp RGBMax) Mod RGBMax
r = Imgp Mod RGBMax
Imgp1 = GetPixel(Img.hdc, x - 1, y - 1)
b1 = Imgp1 RGBMax RGBMax
g1 = (Imgp1 RGBMax) Mod RGBMax
r1 = Imgp1 Mod RGBMax
DoEvents
a = (((b - b1) + (g - g1) + (b - b1)) / 3) + 128
If a >= 255 Then a = 255
If a <= 0 Then a = 0
SetPixel Img2.hdc, x, y, RGB(a, a, a)
Next y
DoEvents
Next x
Img.Refresh
End Sub
Funkčnost a princip celého algoritmu závisí na vzorci,
a = (((b - b1) + (g - g1) + (b - b1)) / 3) + 128
který udělá rozdíl jednotlivých barevných složek a z těchto rozdílů vypočítá průměr, ke kterému je přičteno 128. Hodnota 128 může být předávána jako argument a může být proměnná, ale to vyžaduje drobnou změnu kódu, kterou snad již zvládnete. V některém z dalších dílů si povíme o dalších možnostech Embosingu, a tím je nastavení střední barvy a míra rozdílů.