Frage

Ich habe ein Verzeichnis von Bitmaps, die alle von der gleichen Dimension sind. Ich möchte diese Bitmaps in eine Videodatei konvertieren. Ist mir egal, wenn die Videodatei (Codec) wmv oder avi ist. Meine einzige Bedingung ist, dass ich die Framerate angeben. Das muss nicht Cross-Plattform Windows (Vista und XP) nur sein. Ich habe ein paar Dinge lesen Sie über das Windows Media SDK oder Directshow verwenden, aber keiner von ihnen ist, dass explizit über Codebeispiele bereitgestellt wird.

Könnte jemand einen Einblick, oder einige wertvolle Ressourcen zur Verfügung stellen, die mir helfen könnte dies in C # zu tun?

War es hilfreich?

Lösung

Auf der Gefahr abgewählt zu werden, werde ich eine mögliche Alternative wählen-- einer gepufferten Bitmap Animation bieten.

double framesPerSecond;
Bitmap[] imagesToDisplay;     // add the desired bitmaps to this array
Timer playbackTimer;

int currentImageIndex;
PictureBox displayArea;

(...)

currentImageIndex = 0;
playbackTimer.Interval = 1000 / framesPerSecond;
playbackTimer.AutoReset = true;
playbackTimer.Elapsed += new ElapsedEventHandler(playbackNextFrame);
playbackTimer.Start();

(...)

void playbackNextFrame(object sender, ElapsedEventArgs e)
{
    if (currentImageIndex + 1 >= imagesToDisplay.Length)
    {
            playbackTimer.Stop();

            return;
    }

    displayArea.Image = imagesToDisplay[currentImageIndex++];
}

Ein Ansatz, wie dies funktioniert gut, wenn der Betrachtungs Benutzer Zugriff auf die Bilder, genügend Ressourcen hat die Bilder im Speicher zu halten, will nicht für ein Video warten, zu kodieren, und es kann einen Bedarf für verschiedene Wiedergabe existiert Geschwindigkeiten.

... nur um es zu werfen da draußen.

Andere Tipps

Sie können mit Splicer dies zu tun.

Bitte siehe Beispiel 3 unter http: // www.codeplex.com/splicer/Wiki/View.aspx?title=News%20Feeds&referringTitle=Home

Edit:

using (ITimeline timeline = new DefaultTimeline(25))
{
    IGroup group = timeline.AddVideoGroup(32, 160, 100);

    ITrack videoTrack = group.AddTrack();
    IClip clip1 = videoTrack.AddImage("image1.jpg", 0, 2);
    IClip clip2 = videoTrack.AddImage("image2.jpg", 0, 2);
    IClip clip3 = videoTrack.AddImage("image3.jpg", 0, 2);
    IClip clip4 = videoTrack.AddImage("image4.jpg", 0, 2);

    double halfDuration = 0.5;

    group.AddTransition(clip2.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
    group.AddTransition(clip2.Offset, halfDuration, StandardTransitions.CreateFade(), false);

    group.AddTransition(clip3.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
    group.AddTransition(clip3.Offset, halfDuration, StandardTransitions.CreateFade(), false);

    group.AddTransition(clip4.Offset - halfDuration, halfDuration, StandardTransitions.CreateFade(), true);
    group.AddTransition(clip4.Offset, halfDuration, StandardTransitions.CreateFade(), false);

    ITrack audioTrack = timeline.AddAudioGroup().AddTrack();

    IClip audio =
        audioTrack.AddAudio("soundtrack.wav", 0, videoTrack.Duration);

    audioTrack.AddEffect(0, audio.Duration,
                        StandardEffects.CreateAudioEnvelope(1.0, 1.0, 1.0, audio.Duration));

    using (
        WindowsMediaRenderer renderer =
            new WindowsMediaRenderer(timeline, "output.wmv", WindowsMediaProfiles.HighQualityVideo))
    {
        renderer.Render();
    }
}

Sie die AVI * aus avifil32 Bibliothek verwenden können, gibt es hier ein Beispiel (nicht ausprobiert):
http://www.adp-gmbh.ch/csharp/mandelbrot/index. html

Dies könnte für Sie von Interesse sein:
http://bytescout.com/swfslideshowscout_example_c_sharp.html
(Flash-Slideshow von JPG-Bildern mit C # machen)

Eine ideale Technologie zu erreichen, was Sie wollen, ist Directshow Bearbeiten von Dienstleistungen . Wenn dies jedoch ein einmaliges Projekt ist, dann würde ich nicht die Mühe -. Die Lernkurve sehr steil sein kann

Es gibt nicht viel in der Art von DEM Beispielcode zur Verfügung, obwohl viele allgemeinen Directshow Proben gibt es sowohl innerhalb als auch außerhalb MSDN. Für Ihre Zwecke würde ich empfehle, beginnend hier für eine grundlegende Erklärung von Standbildern als Videoquelle verwendet wird.

Ich habe es nicht ausprobiert, aber Windows Movie Maker hat eine API und XML-Dateiformat Sie verwenden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top