Код: Выделить всё
int rotation = image.RotationAngle;
MediaPlayer mediaPlayer = new MediaPlayer();
var drawingVisual = new DrawingVisual();
Stopwatch sw = new Stopwatch();
mediaPlayer.ScrubbingEnabled = true;
mediaPlayer.Open(new Uri(image.Key));
mediaPlayer.MediaFailed += (sender, e) => OnMediaFailed(sender, e, dc, image, ref rect);
sw.Start();
while (!(mediaPlayer.NaturalVideoWidth > 0 && !image.IsVideoProcessingError))
{
if (sw.ElapsedMilliseconds > 3000)
{
image.IsVideoProcessingError = true;
break;
}
System.Threading.Thread.Sleep(100);
}
var duration = mediaPlayer.NaturalDuration.TimeSpan.Ticks;
mediaPlayer.Position = new TimeSpan(Convert.ToInt64(duration / 5));
var renderTargetBitmap = new RenderTargetBitmap(mediaPlayer.NaturalVideoWidth, mediaPlayer.NaturalVideoHeight, 96, 96, PixelFormats.Default);
using (var drawingContext = drawingVisual.RenderOpen())
{
var rotateTransform = new RotateTransform(rotation, mediaPlayer.NaturalVideoWidth / 2, mediaPlayer.NaturalVideoHeight / 2);
drawingContext.PushTransform(rotateTransform);
drawingContext.DrawVideo(mediaPlayer, new Rect(0, 0, mediaPlayer.NaturalVideoWidth, mediaPlayer.NaturalVideoHeight));
}
renderTargetBitmap.Render(drawingVisual);
var pixels = new uint[mediaPlayer.NaturalVideoWidth * mediaPlayer.NaturalVideoHeight];
renderTargetBitmap.CopyPixels(pixels, mediaPlayer.NaturalVideoWidth * 4, 0);
im.Image = renderTargetBitmap;
mediaPlayer.Close();
mediaPlayer = null;
_dc.DrawImage(im.Image, rect);

Если не повернуто, отображается правильно (растянуто по вертикали и горизонтали):

Что я могу сделать? Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/791 ... icture-wpf