× Aktuálně z oboru

SHIELD Experience Upgrade 7 – méně hledání a více zábavy [ clanek/2018052902-shield-experience-upgrade-7-mene-hledani-a-vice-zabavy/ ]
Celá zprávička [ clanek/2018052902-shield-experience-upgrade-7-mene-hledani-a-vice-zabavy/ ]

Grafický editor - 4. díl

[ http://programujte.com/profil/27-jiri-chytil/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/75-martin-zak/ ]Google [ :?rel=author ]       4. 2. 2006       10 485×

Tentokrát se podíváme na to, jak vytvořit kapátko. Čili jak získat určitou barvu z obrazu...

Opět se vracím k seriálu, v němž poskytuji návody na to, jak vytvořit jednoduchý grafický editor podobný malování. V tomto díle se budu zabývat kapátkem.

Zaprvé je třeba vytvořit si určitý formulář, na němž bude obraz, z nějž chceme barvu získat. Potom bude třeba ještě jeden formulář. Na něm budou tři (pokud jim někdo chce dát kód i v hexa, tak je možnost využít integrovanou funkci hex() a přidat ještě čtvrtý) textboxy a jeden Picture box. Nějak pěkně to uspořádat, formuláři dát okraje none. Bude sloužit jako informační. Pokud tedy klikneme na nějaké místo, tak se objeví a v něm i hodnoty a v picture boxu bude zobrazena vybraná barva.

Kód, který to celé umožní, je v celku krátký. Samozřejmě by se našla i lepší řešení, ale toto řešení je velmi jednoduché a pochopitelné. První věc, kterou musíme udělat, když načteme kapátko, je loadnout okno kapátka. Takto:


Load Form2

Potom už přijde na řadu samotná procedura mouse_down. To znamená, že pokud kliknete do picture boxu, stane se, co se má stát a to podle tohoto kódu:


Private Sub img_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
                
    Imgp = img.Point(X, Y) ‘tyto čtyři řádky kódu se starají o výpočet
    ‘hodnot v bodu obrázku na souřadnicích XY pro jednotlivé složky RGB
    b = Imgp  256  256
    g = (Imgp  256) Mod 256
    r = Imgp Mod 256

    With Form2 ‘v bloku With se nastavují všechny vlastnosti formuláře. *)
        .Text1 = r
        .Text2 = g
        .Text3 = b
        .Picture1.BackColor = RGB(r, g, b)

        .Left = X - .Width + Form1.Left
        .Top = Y - .Height + Form1.Top
        .Show 0, Form1
    End With
    
    If Button = 1 Then Call SetPrimaryColor(r, g, b) ‘**)
    If Button = 2 Then Call SetSecondryColor(r, g, b)
End Sub

*) první se do textboxů uloží hodnoty pro jednotlivé složky. Pak se z nich složí výsledná barva a vyplní se jí pozadí obrázku na Form2. A potom se formulář přestěhuje na vhodné místo.

**) poslední část kódu se věnuje ukládání barvy do pracovní palety. V pracovní paletě se pracuje v základě se dvěma barvami, to je primární, ta se používá, pokud kreslíme levým tlačítkem, a potom je to sekundární, a ta se používá, kreslíme-li pravým tlačítkem. Zde se právě rozhoduje o tom, zda jsme klikli na pravé nebo na levé tlačítko a podle toho se barva uloží. Zde je k tomu použito tříd, takže samotný princip uložení je vám utajen. To nevadí, protože stejně tak můžeme napsat:


If Button = 1 Then PrimaryColor = RGB(r,g,b)

A totéž udělat i v druhém případě. Třídám se budeme věnovat později v kurzu.

Jakmile budete kapátko vypínat, je důležité, abyste unloadnuli formulář z paměti.


Unload Form2

Pokud budu mít dost času, tak příští díl věnuji správě barev. Zaprvé té běžné a zadruhé šílenými alternativami jako jsou rotační zásobníky a podobně. Ty mohou značně zpříjemnit činnost. Ale nic neslibuji, protože to je práce na moc hodin :).


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2006020201-graficky-editor-4-dil/ ].