× Aktuálně z oboru

Vychází Game Ready ovladače pro Far Cry 5 [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]
Celá zprávička [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]

Práce s grafikou X. – Desaturace

[ http://programujte.com/profil/27-jiri-chytil/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/20356-jan-metelka/ ]Google [ ?rel=author ]       26. 12. 2005       12 807×

Jednoduchý algoritmus na částečné odbarvení obrázku...

Desaturace neboli odbarvení, je efekt poměrně důležitý a obrázky jím ošetřené jsou velice hezké. Efekt je velmi jednoduchý, stačí tvořit průměr všech barevných složek RGB a jednu z nich, tu, která má být výsledná, přidáme vícekrát.


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 Desaturace (Img As PictureBox, Value As Long)
Const RGBMax = 256

    Value = 16 - Value
    
    Img.DrawWidth = 1
    Img.ScaleMode = 3
    Img.AutoRedraw = True
    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
                
                r1 = (g + b + Value * r) / (Value + 2)
                g2 = (r + b + Value * g) / (Value + 2)
                b3 = (r + g + Value * b) / (Value + 2)
                
                Call SetPixel(Img.hdc, x, y, RGB(r1, g2, b3))
            Next y
            DoEvents
        Next x
    Img.Refresh
End Sub

Hodnota zadávaná do Value by měla být asi v rozmezí 0 – 15, jiné hodnoty můžou úplně změnit funkčnost algoritmu nebo výsledný efekt udělat velmi nepatrný. Čím vyšší je číslo, tím vyšší je i míra desaturace.

Mimo jiné, efekt není zrovna lineární, a tudíž rozdíl mezi čísly 14 a 15 je obrovský zatímco mezi čísly 1 a 2 je jen těžko rozeznatelný, takže je to na vaší matematice, jak se s tímto problémem dovedete vypřádat.


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2005121803-prace-s-grafikou-x-desaturace/ ].