Jag har en loop som målar upp innehållet i ett fönster men jag har problem med att det flimmrar (page flipping kallas det väl?). Kan man komma undan det på något sätt? Jag vet inte om det finns flera sätt att måla något på, men jag använder ett Graphics-objekt. Nej, det är inte problemet som heter 'page flipping', utan lösningen. Ok, där ser man. Finns det nåt speciellt smidigt sätt att göra detta på eller ska jag bara sätta mig ner och försöka? Som det är nu så skriver jag först till ett objekt i minnet såhär: Ja, det är en form av page flipping. Ja, det är en stor bild. Jag ritar direkt på formen. Vore det bättre om jag ritade på något annat objekt? Testa att lägga ett objekt i formläret, som du kör invalidate på och som du ritar bilden på. Då kommer ju inte hela formuläret att ritas om. Det funkade faktiskt utmärkt! Jag tycker det verkar lite konstigt eftersom formen är lika stor som det objektet jag ritar på nu, men det är väl bara att tacka och ta emot. Lägg till följande efter InitializeComponent så får du doublebuffring och slipper flimmret.Page flipping
Sv: Page flipping
Page flipping är att rita ut grafiken i ett objekt som inte visas på skärmen. När man ritat färdigt i objektet så ritar man ut objektet på skärmen.
När man använder page flipping "på riktigt" så uppdaterar man hela skärmen och använder två uppsättningar av skärmen i minnet, en sida som man visar och en sida som man ritar på. När man ritat färdigt en skärmbild så ändrar man bara pekaren så att det är den sidan som visas på skärmen istället, och börjar rita på den andra sidan.Sv:Page flipping
<code>
canvas=new Bitmap(5*worldSize,5*worldSize,System.Drawing.Imaging.PixelFormat.Format24bppRgb);
</code>
när det är klart så uppdaterar jag formen med formen.Invalidate() och där står
<code>
Graphics tempArtist=e.Graphics;
tempArtist.DrawImage(simulation.canvas,1,1,simulation.worldSize*5,simulation.worldSize*5);
</code>
Är det då inte redan en form av page flipping?Sv: Page flipping
Är det en stor bild som du ritar ut?
En tänkbar förklaring till att det flimrar är om det är något annat objekt som ritar ut något innan din kod ritar ut bilden, till exempel bakgrunden för formuläret.
Gör du invalidate på hela formuläret? Räcker det inte med att göra det på det objekt som ska ritas om?Sv:Page flipping
Sv: Page flipping
Sv:Page flipping
Sv: Page flipping
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();