× Aktuálně z oboru

Programátoři po celém světě dnes slaví Den programátorů [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]
Celá zprávička [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]

Práce s grafikou VII. – Embosing

[ http://programujte.com/profil/27-jiri-chytil/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/20356-lucie-z/ ]Google [ ?rel=author ]       2. 12. 2005       9 019×

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ů.


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2005112601-prace-s-grafikou-vii-embosing/ ].