Kontrast obrázku v pictureboxu   otázka

VB.NET, Komponenty, Algoritmy

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

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Změnu kontrastu vždy aplikujete na bitmapu v picCapture.Image, kde již není zdrojový obrázek, ale obrázek se změněným kontrastem. Doporučuji uložit do proměné původní obrázek a změnu kontrastu vždy aplikovat na něj.

Předpokládejme tedy, že původní obrázek uložíte do proměné sourceImage. Pak nahraďtě

Dim _img As Image = picCapture.Image

tímto:

Dim _img as Image = sourceImage

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback