Ein Vorschaubild aus einer Videodatei erstellen mittels MediaPlayer (3.5SP1) ergibt immer ein schwarzes Bild :(

06/01/2009 - 11:16 von Volkan Senguel | Report spam
Hallo zusammen, ich versuche ein Vorschaubild aus einer Videodatei zu
speichern.
Dazu benutze ich den MediaPlayer aus dem 3.5SP1 Framework.

Leider bekomme ich immer ein schwarzes Bild wenn die Datei geschrieben wird
:(
Die Videodateien laufen alle auf dem Rechner (WMP), also Codecs etc. alles
da

Hier die benutzten Methoden:















CODE>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>





























using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media;
using System.Windows.Media.Imaging;



public static void CreateThumbnail(string filePath, int width, int
height, int quality, ImageType imageType)
{
if (File.Exists(filePath))
{
string ext = Path.GetExtension(filePath).ToLower();
try
{
if (VALID_EXTENSIONS_MOVIES.Contains(ext))
{
MediaPlayer player = new MediaPlayer();
player.Open(new Uri(filePath, UriKind.Absolute));
player.ScrubbingEnabled = true;
player.Play();
player.Pause();
player.Position = new TimeSpan(0, 0, 2);

Thread.Sleep(4000);
RenderTargetBitmap rtb = new
RenderTargetBitmap(width, height, 1 / (double)200, 1
/ (double)200, PixelFormats.Pbgra32);
DrawingVisual dv = new DrawingVisual();
DrawingContext dc = dv.RenderOpen();
dc.DrawVideo(player, new Rect(0, 0, width, height));
dc.Close();
rtb.Render(dv);
BitmapEncoder encoder =
CreateBitmapEncoder(imageType, quality);
encoder.Frames.Add(BitmapFrame.Create(rtb));


// Write to file < PROBLEM ???
FileStream stream = new
FileStream(@"D:\Filme\Thumb.png", FileMode.Create);
encoder.Save(stream);
// End writing

player.Stop();
GC.Collect();
}
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
}

protected static BitmapEncoder CreateBitmapEncoder(ImageType
imageType, int quality)
{
BitmapEncoder result;
switch (imageType)
{
case ImageType.Png:
result = new PngBitmapEncoder();
break;
case ImageType.Jpeg:
result = new JpegBitmapEncoder();
((JpegBitmapEncoder)result).QualityLevel = quality;
break;
default:
throw new ArgumentException(string.Format("Thumbnail
type '{0}' not supported", imageType));
}
return result;
}

public enum ImageType
{
Unknown = 0,
Jpeg = 1,
Png = 2
}






























































































































































































































































Wie kann ich ein Bild auf die Festplatte schreiben?

Ach ja, der MediaPlayer ist nicht auf dem Form sichtbar - vielleicht ist
dass etwas relevantes.
Das ganze soll nachher ein Service werden wo im Hintergrund Vorschaubilder
von Verzeichnissen erstellen soll.

Danke für einen Hinweis.
Volkan Senguel
 

Lesen sie die antworten

#1 Volkan Senguel
07/01/2009 - 14:36 | Warnen spam
Hat keinen einen Tip für mich?

"Volkan Senguel" schrieb im Newsbeitrag
news:%23Qj7Ue%
Hallo zusammen, ich versuche ein Vorschaubild aus einer Videodatei zu
speichern.
Dazu benutze ich den MediaPlayer aus dem 3.5SP1 Framework.

Leider bekomme ich immer ein schwarzes Bild wenn die Datei geschrieben
wird :(
Die Videodateien laufen alle auf dem Rechner (WMP), also Codecs etc. alles
da

Hier die benutzten Methoden:

CODE>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>





























using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media;
using System.Windows.Media.Imaging;



public static void CreateThumbnail(string filePath, int width, int
height, int quality, ImageType imageType)
{
if (File.Exists(filePath))
{
string ext = Path.GetExtension(filePath).ToLower();
try
{
if (VALID_EXTENSIONS_MOVIES.Contains(ext))
{
MediaPlayer player = new MediaPlayer();
player.Open(new Uri(filePath, UriKind.Absolute));
player.ScrubbingEnabled = true;
player.Play();
player.Pause();
player.Position = new TimeSpan(0, 0, 2);

Thread.Sleep(4000);
RenderTargetBitmap rtb = new
RenderTargetBitmap(width, height, 1 / (double)200,
1 / (double)200, PixelFormats.Pbgra32);
DrawingVisual dv = new DrawingVisual();
DrawingContext dc = dv.RenderOpen();
dc.DrawVideo(player, new Rect(0, 0, width,
height));
dc.Close();
rtb.Render(dv);
BitmapEncoder encoder =
CreateBitmapEncoder(imageType, quality);
encoder.Frames.Add(BitmapFrame.Create(rtb));


// Write to file < PROBLEM ???
FileStream stream = new
FileStream(@"D:\Filme\Thumb.png", FileMode.Create);
encoder.Save(stream);
// End writing

player.Stop();
GC.Collect();
}
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
}

protected static BitmapEncoder CreateBitmapEncoder(ImageType
imageType, int quality)
{
BitmapEncoder result;
switch (imageType)
{
case ImageType.Png:
result = new PngBitmapEncoder();
break;
case ImageType.Jpeg:
result = new JpegBitmapEncoder();
((JpegBitmapEncoder)result).QualityLevel = quality;
break;
default:
throw new ArgumentException(string.Format("Thumbnail
type '{0}' not supported", imageType));
}
return result;
}

public enum ImageType
{
Unknown = 0,
Jpeg = 1,
Png = 2
}










































































































































































Wie kann ich ein Bild auf die Festplatte schreiben?

Ach ja, der MediaPlayer ist nicht auf dem Form sichtbar - vielleicht ist
dass etwas relevantes.
Das ganze soll nachher ein Service werden wo im Hintergrund Vorschaubilder
von Verzeichnissen erstellen soll.

Danke für einen Hinweis.
Volkan Senguel



Ähnliche fragen