Anonymous
Проблема при рисовании повернутого изображения wpf
Сообщение
Anonymous » 21 окт 2024, 12:09
У меня есть этот код для рисования изображения из видео... изображение нужно повернуть:
Код: Выделить всё
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
1729501779
Anonymous
У меня есть этот код для рисования изображения из видео... изображение нужно повернуть: [code] 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); [/code] Я хочу, чтобы изображение заполнило мой прямоугольник, но при повороте оно растягивается только по вертикали, а не по горизонтали. [img]https://i.sstatic.net/XWeRfCHc.png[/img] Если не повернуто, отображается правильно (растянуто по вертикали и горизонтали): [img]https://i.sstatic.net/51FlBNnH.png[/img] Что я могу сделать? Спасибо! Подробнее здесь: [url]https://stackoverflow.com/questions/79109344/issue-when-drawing-a-rotated-picture-wpf[/url]