<html><body>Je potřeba použít hw akceleraci. Místo kopírování celé bitmapy o řádek dál prostě jen říct nějaké knihovní funkci, aby řekla grafice, že má celý obsah okna posunout o řádek a pak tam nakopírovat jen ten nový řádek. <br><br>PH<br><br><p>Od: Jaroslav Buchta <jaroslav.buchta@hascomp.cz><br></p><blockquote>Jakym smerem se vydat? Potrebuju v podstate rychle posouvat radky v okne <br>a pridavat nove radky, je to pro vizualizaci dat z radkove kamery.<br>Tak 1000 radku/s po 512 px by bylo ideal. Uvedeny kod zvladne tak 40 <br>(512x500 pixelu) takze to chce vice nez radove zlepseni vykonu.<br><br>Zatim jsem udelal tento hruby pokus a tudy cesta asi nevede (da se to <br>urcite jeste optimalizovat ale je to v principu same kopirovani velkeho <br>pole)<br><br>Existuje nejaka lepsi metoda, jak rychle periodicky zobrazovat v okne <br>aktualni obraz ktery je jako pole pixelu? Ale zas univerzalni, aby to <br>nebylo vazane na nejakou konkretni graf. kartu, cpu atp.<br><br>         private unsafe void backgroundWorker1_DoWork(object sender, <br>DoWorkEventArgs e)<br>         {<br><br>             while (!bwFin)<br>             {<br><br>                 BitmapData bmd = bmp.LockBits(new Rectangle(0, 0, <br>bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);<br><br>                 IntPtr ptr = bmd.Scan0;<br><br>                 int lnBytes = Math.Abs(bmd.Stride);<br>                 int bytes = lnBytes * bmp.Height;<br>                 if (rgbValues == null)<br>                 {<br>                     rgbValues = new byte[bytes];<br><br>                 }<br>                 else<br>                 {<br>                     byte[] ba = rgbValues.Skip(lnBytes).ToArray();<br>                     rgbValues = new byte[bytes];<br>                     ba.CopyTo(rgbValues, 0);<br>                 }<br><br>                 for (int y = bmp.Height-1; y < bmp.Height; y++)<br>                 {<br>                     byte[] ln = new byte[bmp.Width * 4];<br>                     for (int x = 0; x < bmp.Width; x++)<br>                     {<br>                         byte l = byte((x + y + bmOfs) % 256);<br>                         ln[x * 4 + 0] = l;<br>                         ln[x * 4 + 1] = l;<br>                         ln[x * 4 + 2] = l;<br>                         ln[x * 4 + 3] = 255;<br>                     }<br>                     ln.CopyTo(rgbValues, lnBytes * (bmp.Height - 1));<br>                 }<br><br>System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, <br>bmp.Height * lnBytes);<br><br>                 bmp.UnlockBits(bmd);<br><br>                 bmOfs++;<br>                 if (bmOfs > bmp.Height) bmOfs = 0;<br><br>                 pictureBox1.Image = bmp.Clone() as Image;<br>             }<br>             pictureBox1.Image = null;<br>         }<br></blockquote></body></html>