NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
D0ll0k
Člen
Avatar
D0ll0k:30.8.2015 15:57

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
Veni, vidi, programmato
Avatar
David Mlčoch
Tvůrce
Avatar
David Mlčoch:30.8.2015 16:02

Mysliš jako barevný přechod?

 
Nahoru Odpovědět
30.8.2015 16:02
Avatar
D0ll0k
Člen
Avatar
Odpovídá na David Mlčoch
D0ll0k:30.8.2015 16:09

Přesně tak

Nahoru Odpovědět
30.8.2015 16:09
Veni, vidi, programmato
Avatar
David Mlčoch
Tvůrce
Avatar
David Mlčoch:30.8.2015 16:46

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
Odpovídá na David Mlčoch
D0ll0k:30.8.2015 17:15

Díky zkusim to

Nahoru Odpovědět
30.8.2015 17:15
Veni, vidi, programmato
Avatar
D0ll0k
Člen
Avatar
Odpovídá na David Mlčoch
D0ll0k:2.9.2015 16:01

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
Veni, vidi, programmato
Avatar
Odpovídá na D0ll0k
Neaktivní uživatel:2.9.2015 19:18

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
Neaktivní uživatelský účet
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Neaktivní uživatel
D0ll0k:3.9.2015 15:52

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
Veni, vidi, programmato
Avatar
Odpovídá na D0ll0k
Neaktivní uživatel:3.9.2015 18:55

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
Neaktivní uživatelský účet
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Neaktivní uživatel
D0ll0k:4.9.2015 16:36

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
Veni, vidi, programmato
Avatar
Neaktivní uživatel:4.9.2015 17:18
<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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
4.9.2015 17:18
Neaktivní uživatelský účet
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Neaktivní uživatel
D0ll0k:5.9.2015 10:53

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
Veni, vidi, programmato
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.