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 :).