Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Milan
Člen
Avatar
Milan:2.2.2018 14:45

Ahoj,

udělal jsem si jednoduchý prohlížeč obrázků a pokouším se tam přidat jas, kontrast, rgb apod...

void RGBcolors()
       {
           float changeRed = trackBarRed.Value;
           float changeGreen = trackBarGreen.Value;
           float changeBlue = trackBarBlue.Value;

           float changeMatrixRed = 1 + changeRed;
           float changeMatrixGreen = 1 + changeGreen;
           float changeMatrixBlue = 1 + changeBlue;

           Image img = pictureBoxImagePreview.Image;
           Bitmap bmpInverted = new Bitmap(img.Width, img.Height);

           ImageAttributes ia = new ImageAttributes();
           ColorMatrix cmPicture = new ColorMatrix(new float[][]
           {
           new float []{changeMatrixRed, 0, 0, 0, 0},
           new float []{0, changeMatrixGreen, 0, 0, 0},
           new float []{0, 0, changeMatrixBlue, 0, 0},
           new float []{0, 0, 0, 1, 0},
           new float []{0, 0, 0, 0, 1}
           });

           ia.SetColorMatrix(cmPicture, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
           Graphics g = Graphics.FromImage(bmpInverted);

           g.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia);
           g.Dispose();
           pictureBoxImagePreview.Image = bmpInverted;
       }

Ale mám problém, že jakmile jednou změním hodnotu třeba red track baru, tak další změna mi to přičte a při vynulování se obrázek nevrátí na původní stav. Vím proč, ale nedokážu napsat nějakou podmínku, která mi to ovlivní. Vždy se mi to nějak zacyklí a spadne s nedostatkem paměti. A druhý dotaz je k scalingu k té rgb matici. Nemohu nějak přijít na to, jaké měřítko nastavit, vždy se dostanu na max, když nastavím třeba 10. A já chci pracovat v intervalu <0;255>. Zkoušel jsem to poměrem, ale nefunguje mi to. Díky moc za radu.

 
Odpovědět
2.2.2018 14:45
Avatar
HONZ4
Člen
Avatar
Odpovídá na Milan
HONZ4:4.2.2018 13:02

Jde o to, že pravděpodobně jako vstup používáš pictureBoxIma­gePreview, proto se data přičtou.

Udělej to tak, že po načtení obrázku si obrázek dej do Image _original a ten pak zobrazuj v PictureBoxu buď jako originál nebo _original použij jako vstup do filtru a výstup filtru zobraz v PictureBoxu. Tak budeš mít zachovaný původní stav obrázku.

Editováno 4.2.2018 13:05
 
Nahoru Odpovědět
4.2.2018 13:02
Avatar
Odpovídá na Milan
Radek Chalupa:5.2.2018 8:17

Ty hodnoty v matici (např. changeMatrixRed) jsou čílsla kterými se násobí příslušné rgb složky, tj. když chceš např. R zvýšit o 10%, musí být hodnota changeRedMatrix nastavena na 1.1. Takže bys tam měl k té 1 příčítat hodnoty z trackbaru dělené 10 popř. 100 (podle požadované citlivosti).

Radek Chalupa
http://www.radekchalupa.cz

 
Nahoru Odpovědět
5.2.2018 8:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.