<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>