[OT] jak na rychle vykreslovani bitmap, Win, C#
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Pondělí Leden 19 20:59:13 CET 2015
OK, diky, takze zkusim prozkoumat OpenGL.
To vykreslovani radku po skupinach je jasne, tohle bylo jen pro test
rychlosti.
Ja to mel udelane v C++ kdysi davno pro jednu aplikaci, pomaleji ale
docela to stihalo pres bitmapy a winapi jeste v WinNT4. V to C# mi
docela chybi nejaka funkce typu Move misto Copy primo nad bufferem...
Dne 19. 1. 2015 v 20:27 Galloth napsal(a):
> OpenGL je otevřená alternativa k DirectX. Obojí umí jak 2D tak 3D.
> Snazit se udelat 1000radku/s je spatne, protoze monitor Vám stejně
> bude vykreslovat par desitek obrazků za sekundu. Grafické knihovny
> (jak OpenGL tak DirectX) Vám umožní přístup do framebufferu, takže
> tam můžete řádky přidávat podle libosti a pak je naráz vykreslit.
> Doporučoval bych například vykreslovat po vložení každého 20 řádku
> (což bude dělat 50framů za sekundu) a tím se vyhnout posouvání bitmapy
> pro každý řádek (prostě vždy poskočí o 20 řádků).
>
> Honza
>
> Dne 19. ledna 2015 19:55 Jaroslav Buchta <jaroslav.buchta na hascomp.cz
> <mailto:jaroslav.buchta na hascomp.cz>> napsal(a):
>
> 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>
>> <mailto: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 bywww.HW.cz <http://www.HW.cz>
>> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
> ------------------------------------------------------------------------
> <http://www.avast.com/>
>
> This email has been checked for viruses by Avast antivirus software.
> www.avast.com <http://www.avast.com/>
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
>
> _______________________________________________
> 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/89301fef/attachment.html>
Další informace o konferenci Hw-list