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

Pavel Hudeček edizon na seznam.cz
Pondělí Leden 19 19:51:58 CET 2015


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;
}
"
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20150119/4c10f34f/attachment.html>


Další informace o konferenci Hw-list