Práce s grafikou XIII - Plastický obraz
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Práce s grafikou XIII  - Plastický obrazPráce s grafikou XIII - Plastický obraz

 

Práce s grafikou XIII - Plastický obraz

Google       Google       5. 2. 2006       7 325×

Ve světě grafiky je tolik filtrů, že si to snad ani nedovedeme představit. A ještě víc je jejich modifikací a jejich kombinací a tak dále. Nastavením různých parametrů opět dosahujeme jiných změn...
..

Reklama
Reklama

Některé filtry se objeví jen tak. Náhodou píšete, píšete a je to tu. Stejně jako tento filtr, který je vlastně vedlejším produktem při tvorbě úplně jiného filtru, o kterém jsem psal a to je ostření.

Jeho kód vypadá takto:


Public Sub Plastic(Img As PictureBox, img2 As PictureBox, Value As Long)
    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)
                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
               ImgP = GetPixel(Img.hdc, x - Value, y - Value)
                b5 = ImgP  rgbmax  rgbmax
                g5 = (ImgP  rgbmax) Mod rgbmax

                r5 = ImgP Mod rgbmax
               ImgP = GetPixel(Img.hdc, x + Value, y - Value)
                b6 = ImgP  rgbmax  rgbmax
                g6 = (ImgP  rgbmax) Mod rgbmax
                r6 = ImgP Mod rgbmax
               ImgP = GetPixel(Img.hdc, x - Value, y + Value)
                b7 = ImgP  rgbmax  rgbmax
                g7 = (ImgP  rgbmax) Mod rgbmax
                r7 = ImgP Mod rgbmax
               ImgP = GetPixel(Img.hdc, x + Value, y + Value)
                b8 = ImgP  rgbmax  rgbmax
                g8 = (ImgP  rgbmax) Mod rgbmax
                r8 = ImgP Mod rgbmax
                
                r = ((-r0) - (r5 + r7 + r3)) + (r1 + r6 + r8 + r2 + r4)
                g = ((-g0) - (g5 + g7 + g3)) + (g1 + g6 + g8 + g2 + g4)
                b = ((-b0) - (b5 + b7 + b3)) + (b1 + b6 + b8 + b2 + b4)

                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
End Sub

Upřímně řečeno, když vidím ten vzorec, tak nic moc. Se docela divím, že to vůbec funguje. Tak jak ten vzorec vidíte, tak vypadl, když jsem ho napsal prakticky omylem. Tak jsem ho trochu upravil.


r = (r1 + r6 + r8 + r2 + r4) - (r0 + r5 + r7 + r3)

Jak jednoduché jsou to rozdíly součtů jednotlivých okolních bodů. A tak pěkně to funguje. Však zkuste a uvidíte, optimální hodnoty jsou asi:


Plastic Picture1, Picture2, 1

Při hodnotách jiných se tento efekt výrazně mění (např. s hodnotami 10 a víc-ale ne o moc-tak do 30, ale to už často nepoznáte předešlý motiv, ale stojí za to to vyzkoušet, ale pak je potřeba tento efekt přejmenovat).

Třeba mně se povedlo s hodnotami:


Plastic Picture1, Picture2, 60

Dosáhnout tohoto:

A to z koňské hlavy, kterou používám jako testovací obrázek.

To je pro dnešek vše.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

2 názory  —  2 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jiří ChytilAutor programuje ve VB, zajímá se o elektrotechniku, studuje na SOŠ Elektrotechnické - obor číslicová technika.
Web    

Nové články

Obrázek ke článku Facebook spouští službu Marketplace V ČR

Facebook spouští službu Marketplace V ČR

Společná platforma Marketplace usnadní lidem na Facebooku vyhledávání, nákup a prodej použitého zboží na lokální úrovni. Bude tak přímou konkurencí pro weby a aplikace se stejným zaměřením jako je například Letgo, Bazoš, Aukro, Sbazar a další.

Reklama
Reklama
Obrázek ke článku DistrCut – optimalizace pomocí distribuované inteligence

DistrCut – optimalizace pomocí distribuované inteligence

Optimalizační systémy, které jsem dosud popisoval, se týkaly vždy optimalizace na jednom zařízení. Optimalizovalo se dělení tyčového materiálu na jedné pile, vypalování plošného materiálu na jednom plazmovém stroji, řídilo se tavení na jedné elektrické obloukové peci.

Ve výrobním procesu je však často nutné optimalizovat činnost celého výrobního úseku, kde je více různých objektů odlišného typu a koordinovat činnost těchto objektů k dosažení společného cíle, zpravidla kvality finálního výrobku. Řešení tohoto problému umožňuje distribuovaná inteligence.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý