Avatar
D0ll0k
Člen
Avatar
D0ll0k:

Ahojte :). Chci se zeptat, jestli někdo nemá nápad jak vykreslit ve WPF čtverec, kde v každém rohu budou jiné barvy. A ty barvy se pak budou rozpínat a splývat s ostatními barvami. Nevím, jestli je to dobře srozumitelné, proto přikládám obrázek

Odpovědět 30.8.2015 15:57
Ten, co se snaží "programovat"
Avatar
David Mlčoch
Redaktor
Avatar
David Mlčoch:

Mysliš jako barevný přechod?

 
Nahoru Odpovědět 30.8.2015 16:02
Avatar
D0ll0k
Člen
Avatar
Nahoru Odpovědět 30.8.2015 16:09
Ten, co se snaží "programovat"
Avatar
David Mlčoch
Redaktor
Avatar
David Mlčoch:

Tak já jsem v mé aplikaci využil tohoto kódu:

Dim img As New Bitmap(Libovol­néPole1.Width, LibovolnéPole2­.Height)
Dim brush As New Drawing.Drawin­g2D.LinearGra­dientBrush(New PointF(0, 0), New PointF(img.Width, img.Height), MístoZobrazení1­.BackColor, MístoZobrazení2­.BackColor)
Dim gr As Graphics = Graphics.FromI­mage(img)
gr.FillRectan­gle(brush, New RectangleF(0, 0, img.Width, img.Height))
LibovolnéPole­Zobrazení.Bac­kgroundImage = img

Tenhle kód ti vlastně určuje odkud se berou barvy (Jaké má hodnoty) a vykresluje to do určitého místa, které se ty určíš.

 
Nahoru Odpovědět 30.8.2015 16:46
Avatar
D0ll0k
Člen
Avatar
Nahoru Odpovědět 30.8.2015 17:15
Ten, co se snaží "programovat"
Avatar
D0ll0k
Člen
Avatar
Odpovídá na David Mlčoch
D0ll0k:

No jo, tohle sice funguje, ale je to jen pro dvě barvy, jenže já bych chtěl, aby ty barvy byly tři a aby šla každá z jiného místa

Nahoru Odpovědět 2.9.2015 16:01
Ten, co se snaží "programovat"
Avatar
David Hanina
Člen
Avatar
Odpovídá na D0ll0k
David Hanina:

Ahoj, google si použít zkoušel ? jinak

ColorBlend cb = new ColorBlend();
LinearGradientBrush br = new LinearGradientBrush(this.ClientRectangle, Color.Black, Color.Black, 0f, false);
cb.Positions = new[] { 0, 1/4f, 1/2f, 1 };
cb.Colors = new[] { Color.Green, Color.Yellow, Color.Blue, Color.Red };
br.InterpolationColors = cb;
br.RotateTransform(30);
g.FillRectangle(br, this.ClientRectangle);

barviček si tam můžeš naházet kolik chceš..

 
Nahoru Odpovědět 2.9.2015 19:18
Avatar
D0ll0k
Člen
Avatar
Odpovídá na David Hanina
D0ll0k:

Ahoj, díky za radu, ale hází mi to chybu u ColorBlend. Chybí namespace. Na netu jsem našel, že je z System.Drawin­g.Drawing2D, kde je taky LinearGradien­tBrush, který mi ale chybu nehází. Tak tomu nerozumím. A ještě další chyba je u br, ClientRectangle a g. Hádám, že g bude Graphics a ClientRectangle nějaký libovolný čtverec. Jenom nemohu přijít co je to br.

Editováno 3.9.2015 15:53
Nahoru Odpovědět 3.9.2015 15:52
Ten, co se snaží "programovat"
Avatar
David Hanina
Člen
Avatar
Odpovídá na D0ll0k
David Hanina:

Promiň spletl jsem se...

<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                <LinearGradientBrush.GradientStops>
                    <GradientStop Color="Green" Offset="0"/>
                    <GradientStop Color="Yellow" Offset="0.5"/>
                    <GradientStop Color="Red" Offset="1"/>
                </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

v XAML, ale tento kód musí být v background elementu(třeba grid), jinak je tu na to celý tutoriál http://www.itnetwork.cz/…harp-pozadi/

 
Nahoru Odpovědět 3.9.2015 18:55
Avatar
D0ll0k
Člen
Avatar
Odpovídá na David Hanina
D0ll0k:

Na LinearGradientBrush jsem taky koukal a je tam problém, že barví jedním směrem. Právě bych potřeboval, aby to vypadalo jako na tomto obrázku (třeba vybírání barvy ve VS), aby ty barvy šly každá z jiného rohu čtverce. Taky jsem zkoušel dát ty brushe dva, jenže se mi to nepodařilo.

Nahoru Odpovědět 4.9.2015 16:36
Ten, co se snaží "programovat"
Avatar
David Hanina
Člen
Avatar
David Hanina:
<Grid>
        <Grid>
            <Grid.Background>
                <LinearGradientBrush StartPoint="0,0"  EndPoint="1,0">
                    <LinearGradientBrush.GradientStops>
                        <GradientStop Color="White" Offset="0"/>
                        <GradientStop Color="Red" Offset="1"/>
                    </LinearGradientBrush.GradientStops>
                </LinearGradientBrush>
            </Grid.Background>
        </Grid>
        <Grid>
            <Grid.Background>
                <LinearGradientBrush StartPoint="0,0"  EndPoint="0,1">
                    <LinearGradientBrush.GradientStops>
                        <GradientStop Color="Transparent" Offset="0"/>
                        <GradientStop Color="Black" Offset="1"/>
                    </LinearGradientBrush.GradientStops>
                </LinearGradientBrush>
            </Grid.Background>
        </Grid>
    </Grid>

Toto snad stačí..
Jak to funguje snad už tušíš podle minulýho kódu..

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 4.9.2015 17:18
Avatar
D0ll0k
Člen
Avatar
Odpovídá na David Hanina
D0ll0k:

No jo, transparent. To mě nenapadlo. Díky už to vypadá tak, jak jsem si představoval

Nahoru Odpovědět 5.9.2015 10:53
Ten, co se snaží "programovat"
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 12 zpráv z 12.