Diskuze: vykreslování WPF

C# .NET .NET (C# a Visual Basic) vykreslování WPF American English version English version

Avatar
rwn
Člen
Avatar
rwn:

Zdravím, chtěl bych se na něco zeptat. Mám ve WPF takový program, kde si vykresluji něco ve smyslu harmonogramu na plátno canvas. Je tam taková možnost, kde se dá měnit měřítko osy za běhu - používám na to Slider. V podstatě ho mám nastaven tak, že při změně hodnoty na něm, se mě změní měřítko osy, současný canvas se smaže a vykreslí celý znovu s novým měřítkem. Problém nastvává v tom, že mě ten Slider při posouvání laguje, prostě nestíhá se posouvat v reálném čase - asi tím jak čeká než se vykreslí předchozí změna. Náhodou jsem tento program měl udělaný i ve WF, který teď modifikuju na WPF, a kupodivu ve WF mě (místní TrackBar) vůbec nelagoval. Jak se něco takového dá rozumně odstranit? Nebo mám špatný způsob překreslení? Jediné co mě napadlo je, žebych se Slider posouval jenom po větších částech, ale zas nevěřím, že by se to muselo takhle obcházet a nešlo opravit jinak. :) Budu rád za každý nápad. :)

Odpovědět 31.3.2014 12:32
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Odpovídá na rwn
Jakub Lásko[Saarix]:

Stačilo by ten harmonogram vykreslit do Image a pak mu nastavit příslušné property jako StretchImage a pak při posouvání sliderem měň pouze velikost Image komponent a obrázek uvnitř se bude sám zmenšovat a nebude to lagovat ;) Ale u WPF je vykreslování dost rychlé, takže by to snad ani skrze to tvé provedení lagovat nemuselo.

Editováno 31.3.2014 13:25
Nahoru Odpovědět 31.3.2014 13:25
Časem je vše možné.
Avatar
rwn
Člen
Avatar
Odpovídá na Jakub Lásko[Saarix]
rwn:

Mě je to právěžě dost divné, že to laguju. Hlavně i v tom, že ve WF to nalaguje vůbec. o_O
S tím Image je to super nápad, ani jsem nevěděl, že se to takhle dá řešit :), ale zas já to mám tak, že si tam vykresluju kromě jakési mřížky i texty, což by bylo eventuelně docela blbý kdyby se roztahovaly, ale dík za nápad. :)

Nahoru Odpovědět 1.4.2014 3:35
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
rwn
Člen
Avatar
rwn:

Neexistuje třeba nějaký jednoduchý způsob, kterým bych při debuggingu mohl vidět, jak moc která metoda trvala na provedení? :) Ono mě to laguje asi tím, že tam mám dost metod na výpočty kam se co má přesně vykreslit a toho samotného kreslení je taky dost. Napadá mě leda si tam dát timer a otestovat si to po částech, ale není nějaký jednodušší způsob? :)

Nahoru Odpovědět 3.4.2014 16:30
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
martinsakra
Redaktor
Avatar
Odpovídá na rwn
martinsakra:

jak vykresluješ WPF na canvas? tj umístuješ různé obejtky jako buttony nebo obrázky?, ale v tomhle je wpf rychlejší než WF takže jediný co mě napadá je krelsení kdy ty se snažích vykreslit něco po hodně malých částech (ala obraz po pixelu) co se ve wpf dělá tak že kreslích do ...BufferedBitmap (asi tak se to myslím jmenuje)

Nahoru Odpovědět 3.4.2014 16:35
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na rwn
Jan Vargovský:

Je, jen hledej. Ale jestli máš Express verzi, tak pochybuju.

 
Nahoru Odpovědět 3.4.2014 16:46
Avatar
rwn
Člen
Avatar
Odpovídá na martinsakra
rwn:

Vykresluju na canvas - když nepočítám texty, tak jen pomocí Line cyklem For, s tím, že mu říkám x1,x2,y1,y2. Ona je to poměrně velká plocha na kterou kreslím. Samotná mřízka, kterou kreslím, má přibližně 100 vertikálních čar a přes 200 horizontálních (s rozestupy kolem 30). Pak tam jsou ještě metody, které vypočítají přesnou polohu, kdy operace v "harmonogramu" začíná a končí a vykreslí ji. Myslím si, že je toho prostě hrozně moc, když se to má vykreslovat znovu a znovu při posunutí Slideru.

Jo, mám expres verzi.

Nahoru Odpovědět 3.4.2014 17:21
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
martinsakra
Redaktor
Avatar
Odpovídá na rwn
martinsakra:

podle mě jeden z hlavních problému je, že ty každý "frame" smažeš předchozí objekty na canvasu + vytvořích nových X čar a dalšího ... whatever.
Nebylo lepší spíš ty vytvořené čáry (pokud jsou opravdu nutné) jen posunout o pohyb slideru místo vytváření a mazání?

Nahoru Odpovědět 3.4.2014 17:35
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
rwn
Člen
Avatar
Odpovídá na martinsakra
rwn:

Nj, ale jak mu tohle říct? První čára by se musela posunout o velikost slideru, druhá čára o dvojnásobek, třetí o trojnásobek, atd.. Pozici jednotlivých čar mřížky nemám nikde uloženou k manipulaci.

Nahoru Odpovědět 3.4.2014 17:59
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na rwn
Jan Vargovský:

Se koukni po nějakých pluginech, popřípadě si to implementuj sám.

 
Nahoru Odpovědět 3.4.2014 18:28
Avatar
rwn
Člen
Avatar
Odpovídá na martinsakra
rwn:

A jen čistě teoreticky, kdybych přece čáry chtěl jen posouvat, tak bych stejně canvas musel promazat a vykreslit čáry znovu ne?

Nahoru Odpovědět 3.4.2014 20:36
Co můžeš naprogramovat dnes, neodkládej na zítřek.
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 11 zpráv z 11.