Prosím o radu. Mám picturebox a v něm obrázek. Dále je formuláři trackbar (min=-100, max=100) jehož tažením ovládám změnu kontrastu obrázku:
Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
Dim value As Double = TrackBar1.Value * 0.0005F
Dim colorMatrixElements As Single()() = {New Single() {1, 0, 0, 0, 0}, New Single() {0, 1, 0, 0, 0}, New Single() {0, 0, 1, 0, 0}, New Single() {0, 0, 0, 1, 0}, New Single() {value, value, value, 0, 1}}
Dim colorMatrix As New Imaging.ColorMatrix(colorMatrixElements)
Dim imageAttributes As New ImageAttributes()
imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap)
Dim _img As Image = picCapture.Image
Dim _g As Graphics
Dim bm_dest As New Bitmap(CInt(_img.Width), CInt(_img.Height))
_g = Graphics.FromImage(bm_dest)
_g.DrawImage(_img, New Rectangle(0, 0, bm_dest.Width + 1, bm_dest.Height + 1), 0, 0, bm_dest.Width + 1, bm_dest.Height + 1, GraphicsUnit.Pixel, imageAttributes)
picCapture.Image = bm_dest
End Sub
Je to vygooglený kód a funguje. Když přidávám na kontrastu obaz světlá a je kontrastnější, jenže když se vracím trackbarem zpět, obraz ještě chvíli světlá, pak se zastaví a poslední podoba obrazu začne ubírat na kontrastu a tmavnout. Je mi jasné, že z logiky kódu to tak asi musí být. Jenže já bych potřeboval, aby se obraz vracel k původnímu stavu (0=uprostřed trackabru=původní obraz)a ne aby se začala upravovat jeho poslední podoba vygenerovaná pohybem trackbaru. Tzn. uprostřed aby byl původní stav=normal, doprava přidávání kontrastu, doleva zase ubírání. Poradí někdo vhodnou konstrukci kódu? Děkuji
|