[OT] jak na rychle vykreslovani bitmap, Win, C#

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Pondělí Leden 19 19:55:59 CET 2015


No a to bych prave potreboval nakopnout, ktere knihony by se k tomu daly 
pouzit - zas to neni uplne stezejni a nerad bych se ucil neco na urovni 
programatora her.
Neco jsem nasel o DirectX, ale to je asi docela slozity moloch, nevim 
jestli OpenGL, ale to je spis 3D? Radsi se nejdriv zeptam nez budu 
vyslapavat slepe cesticky ;-)

Dne 19. 1. 2015 v 19:51 Pavel Hudeček napsal(a):
> 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.
>
> PH
>
> Od: Jaroslav Buchta <jaroslav.buchta na hascomp.cz>
>
>     Jakym smerem se vydat? Potrebuju v podstate rychle posouvat radky
>     v okne
>     a pridavat nove radky, je to pro vizualizaci dat z radkove kamery.
>     Tak 1000 radku/s po 512 px by bylo ideal. Uvedeny kod zvladne tak 40
>     (512x500 pixelu) takze to chce vice nez radove zlepseni vykonu.
>
>     Zatim jsem udelal tento hruby pokus a tudy cesta asi nevede (da se to
>     urcite jeste optimalizovat ale je to v principu same kopirovani
>     velkeho
>     pole)
>
>     Existuje nejaka lepsi metoda, jak rychle periodicky zobrazovat v okne
>     aktualni obraz ktery je jako pole pixelu? Ale zas univerzalni, aby to
>     nebylo vazane na nejakou konkretni graf. kartu, cpu atp.
>
>     private unsafe void backgroundWorker1_DoWork(object sender,
>     DoWorkEventArgs e)
>     {
>
>     while (!bwFin)
>     {
>
>     BitmapData bmd = bmp.LockBits(new Rectangle(0, 0,
>     bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);
>
>     IntPtr ptr = bmd.Scan0;
>
>     int lnBytes = Math.Abs(bmd.Stride);
>     int bytes = lnBytes * bmp.Height;
>     if (rgbValues == null)
>     {
>     rgbValues = new byte[bytes];
>
>     }
>     else
>     {
>     byte[] ba = rgbValues.Skip(lnBytes).ToArray();
>     rgbValues = new byte[bytes];
>     ba.CopyTo(rgbValues, 0);
>     }
>
>     for (int y = bmp.Height-1; y < bmp.Height; y++)
>     {
>     byte[] ln = new byte[bmp.Width * 4];
>     for (int x = 0; x < bmp.Width; x++)
>     {
>     byte l = byte((x + y + bmOfs) % 256);
>     ln[x * 4 + 0] = l;
>     ln[x * 4 + 1] = l;
>     ln[x * 4 + 2] = l;
>     ln[x * 4 + 3] = 255;
>     }
>     ln.CopyTo(rgbValues, lnBytes * (bmp.Height - 1));
>     }
>
>     System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr,
>     bmp.Height * lnBytes);
>
>     bmp.UnlockBits(bmd);
>
>     bmOfs++;
>     if (bmOfs > bmp.Height) bmOfs = 0;
>
>     pictureBox1.Image = bmp.Clone() as Image;
>     }
>     pictureBox1.Image = null;
>     }
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



---
This email has been checked for viruses by Avast antivirus software.
http://www.avast.com
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20150119/25f6baeb/attachment.html>


Další informace o konferenci Hw-list