Tema: Re: VS2005 ir Paint
Autorius: Jornada Del Muerto
Data: 2010-09-08 16:49:53
Reiskias viskas ne taip ir sudetinga, 1 tau reikia issitestuoti per kiek laiko tu nupiesi frame'a (kadra - vadinsiu savu slengu "fereimas"), pvz apsispresk kad darysi 25 kadrus i sekunde (to paprastai net zaidimam pakanka).
Nors tiesa jei tavo vaizde niekas greit nejuda tai net tiek nereikia, jei tai butu koks solitaire tai ir 5-10 i sekunde vien tam kad apdirbineti repaint, bet cia jei piesi tiesiogiai i ekrana, jei piesi i kazkoki tai Image, tai ji sistema automatiskai repaintis po resize'o ar minimize maximize ar kitu langu vaiksciojimo virs jo, del to praktiskai tada gali naujint vaizda tik kai kazkas ivyksta.
Kam bereikalo apkraudinet CPU bereikalingu statinio vaizdo repaint'u, o jeigu kaip daroma tai viens is variantu su .net:
Tada imi arba Timer arba BackgroundWorker zodziu arba timer arba atskira thread'a kuris atitinkamu delay suveikineja, pvz:
X = kiek norime kadru i sekunde
// Delay milisekundem, 1 sekunde = 1000 milisekundziu (del aiskumo)
MsDelay = (1000/60)*(60/X); // si delay priskiri pvz. timer'iui programos starto metu (inicializuojant viska) jis tada graziai suveikines tiek kartu i sekunde kiek tu pageidauji kadru.
// Sukuri memberi
Image Frame = new Bitmap(blabla,blabla);
// Kada savo pagrindineje programoje nupiesi (sureenderini) kadra priskiri ji siam kintamajam
this.Frame = bmp;
/// Tada timerio suveikes procesas daro tai
// tikrini ar frame ne null
if(this.Frame!=null) {
myPictureBox.Image = this.Frame;
this.Frame = null;
}
// Taip tu pasieksi kad jei timeris suveiks o dar nebusi pagrindiniam programos cikle nupieses kadro tai nebus nieko ir piesiama
Dar cia gali naudot lock, bet greiciausia to nereiks: http://msdn.microsoft.com/en-us/library/c5kehkcz(VS.71).aspx
"Romualdas KIKILIS" <romkik@medi.lt> wrote in message news:i682vo$3ap$1@trimpas.omnitel.net...
> dar dažnai naujokams mirksi dėl per greito keitimo, (o jie mano atvirkščiai),
> negalima perpiešinėti greičiau nei 50 kartų į sekundę,
> tam cikle reikia būtinai įdėti laukimą: delay(20);
>
> p.s.
> laukimo funkcija būtinai turi būti sisteminė, o ne pačio cikliukai...
>