Hallo Forum!
Ich habe nach einer Lösung gesucht, um Videos vorwärts und rückwärts in beliebiger Geschwindigkeit - also auch Frame für Frame - abzuspielen. Da ich kein brauchbares Control o.ä. gefunden habe, habe ich mich entschlossen, das Ganze mittels MediaDetClass aus dem DexterLib Library in einer PictureBox zu realisieren.
Dazu habe ich die GetBitmapBits-Methode benutzt um die "Snapshots" zu erstellen und mit einem Timer die alle n-Millisekunden die PictureBox aktualisiert.
Soweit funktioniert das auch, allerdings läuft das Ganze nicht rund. Es wird stetig langsamer, bis die Bilder nach ein paar Sekunden wieder mit "normaler" Geschwindigkeit abgespielt werden, dann geht das ganze von vorn los.
Ich hatte den GarbageCollector iin Verdacht, da ich ja jede Menge Bitmap-Objekte erzeuge. Mein versuch den Collector regelmäßig manuell aufzurufen, brachte allerdings keine Besserung bzw. Änderung des Verhaltens.
Dass das Ganze "bremst" liegt offenbar an dieser Methode in meinem Code:
public Bitmap getBitmap(int width, int height, double picPosition)
{
unsafe
{
byte* res = (byte*)ptr1.ToPointer(); //Pointer Erzeugen
dl.GetBitmapBits(picPosition, ref bmpSize, ref *res, width, height);
//BitmapDaten aus Pointer Kopieren. Falls kein Bitmap Objekt erwünscht, mit Marshal.Copy() in ein Bytearray kopieren.
Bitmap bmp = new Bitmap(width, height, width * 3, PixelFormat.Format24bppRgb, new IntPtr(res + bmpHeaderSize));
bmp.RotateFlip(RotateFlipType.Rotate180FlipX);
return (bmp);
}
}
hat jemand 'ne Idee, wie ich das verbessern kann?
Gruß, MHI