2009-07-11 4 views
1

J'ai une séquence d'images jpg que je capture et affiche à l'écran pour créer une vidéo.Rendu d'une séquence d'images en C# pour créer une vidéo

Je suis en train de décompresser l'image à partir d'un MemoryStream en utilisant un JpegBitmapDecoder et de le restituer en réglant la Source sur un contrôle Image. Cela semble fonctionner, mais les frais généraux du processeur sont assez élevés. Les images sont 1280x720, fonctionnant à 30fps et je peux à peine suivre mon ordinateur (Dual Core 2.8Ghz). Courir à des résolutions plus élevées me fait jeter des cadres. Je voudrais essayer d'obtenir l'utilisation du processeur vers le bas.

La plupart du temps passé passé semble être dans le décodage (simples repères du décodage seul sur ma machine à mettre en évidence que je peux décoder environ 40fps). Est-ce que quelqu'un sait s'il existe un décodeur plus rapide disponible (DirectX? DirectShow? Quelque chose que je peux décharger sur la carte vidéo?)

En ce qui concerne le rendu, il ne semble pas que le contrôle Image soit conçu pour ce type d'utilisation (J'étais vraiment surpris que ça marche, j'ai juste essayé car c'était facile à faire). Existe-t-il un autre moyen de rendre les images individuelles plus rapides?

+0

Une solution alternative pourrait être de nommer les jpg séquentiellement, puis d'ouvrir le premier dans VirtualDub, qui les lira ensuite comme une vidéo. –

+0

J'aurais dû être plus clair. Je suis en streaming les images et je veux lire une vidéo en direct à partir des images en streaming. – Dolphin

+0

quelle méthode utilisez-vous pour diffuser les images jpeg? J'essaie presque exactement la même chose et j'utilise BinaryFormatter pour encapsuler le MemoryStream et l'envoyer. Je me demande s'il existe une meilleure méthode. – geometrikal

Répondre

1

Il semble que vous décodiez et redimensionniez le jpeg en même temps. Le redimensionnement peut être cher aussi. Essayez de séparer le décodage et le redimensionnement (en utilisant l'algorithme le moins cher disponible) les jpegs. Utilisez quelque chose comme FreeImage avec "JPEG_FAST" pour décompresser et "FILTER_BOX" pour redimensionner.

Pour l'affichage, TinyPTC est simple et rapide. (un wrapper autour de DirectDraw) C'est C, mais il est assez facile d'écrire un wrapper pour et compiler vers une DLL que vous pouvez référencer.

+0

Redimensionnement est agréable, mais pas nécessaire, la plupart du temps, je vais utiliser la résolution native. Je vais devoir regarder FreeImage pour voir s'il décode plus vite. – Dolphin

+0

JPEG_FAST est certainement plus rapide (presque 50% plus rapide dans mon benchmark simple), je devrai regarder la qualité le lundi pour voir si c'est acceptable. – Dolphin

Questions connexes