MediaElement
MediaElementを使って動画に対して色々なエフェクトを掛けてみた。
凄く簡単だけど、重たいよー。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Media.Effects; namespace MovieEffect { /// <summary> /// Window1.xaml の相互作用ロジック /// </summary> public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void RectButton_Click(object sender, RoutedEventArgs e) { /* 動画の切り抜き(四角形) */ RectangleGeometry rGeometry = new RectangleGeometry(); rGeometry.Rect = new Rect(50, 50, 128, 128); this.mediaElement1.Clip = rGeometry; } private void EllipseButton_Click(object sender, RoutedEventArgs e) { /* 動画の切り抜き(円形) */ EllipseGeometry eGeometry = new EllipseGeometry(); eGeometry.RadiusX = 64; eGeometry.RadiusY = 64; eGeometry.Center = new Point(100, 100); this.mediaElement1.Clip = eGeometry; } private void Origin_Click(object sender, RoutedEventArgs e) { /* 通常 */ this.mediaElement1.Clip = null; this.mediaElement1.BitmapEffect = null; } private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { /* 透明度設定 */ Slider s = new Slider(); s = (Slider)sender; this.mediaElement1.Opacity = (1.0 - s.Value); } private void mediaElement1_MediaEnded(object sender, RoutedEventArgs e) { // ループ再生 this.mediaElement1.Position = new TimeSpan(0); } private void Blur_Click(object sender, RoutedEventArgs e) { /* ぼかし */ BlurBitmapEffect blur = new BlurBitmapEffect(); blur.Radius = 5.0; blur.KernelType = KernelType.Gaussian; this.mediaElement1.BitmapEffect = blur; } private void Shadow_Click(object sender, RoutedEventArgs e) { /* 影 */ DropShadowBitmapEffect shadow = new DropShadowBitmapEffect(); shadow.ShadowDepth = 10; this.mediaElement1.BitmapEffect = shadow; } private void Glow_Click(object sender, RoutedEventArgs e) { /* グロウ */ OuterGlowBitmapEffect glow = new OuterGlowBitmapEffect(); glow.GlowSize = 20; this.mediaElement1.BitmapEffect = glow; } private void Emboss_Click(object sender, RoutedEventArgs e) { /* Emboss */ EmbossBitmapEffect emboss = new EmbossBitmapEffect(); emboss.LightAngle = 100; emboss.Relief = 0.9; this.mediaElement1.BitmapEffect = emboss; } private void slider2_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { /* 傾き */ RotateTransform rotate = new RotateTransform(); Slider s = new Slider(); s = (Slider)sender; rotate.Angle = s.Value; rotate.CenterX = this.mediaElement1.Width / 2; rotate.CenterY = this.mediaElement1.Height / 2; this.mediaElement1.RenderTransform = rotate; } private void slider3_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { /* 拡大 */ ScaleTransform scal = new ScaleTransform(); Slider s = new Slider(); s = (Slider)sender; scal.CenterX = this.mediaElement1.Width / 2; scal.CenterY = this.mediaElement1.Height / 2; scal.ScaleX = s.Value; scal.ScaleY = s.Value; this.mediaElement1.RenderTransform = scal; } private void mediaElement1_MediaOpened(object sender, RoutedEventArgs e) { } } }
<Window x:Class="MovieEffect.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MediaElement Sample" Height="493" Width="300"> <Grid> <Canvas Name="canvas1" Margin="1,0,-1,193"> <MediaElement MediaEnded="mediaElement1_MediaEnded" Canvas.Left="-1" Canvas.Top="0" Height="264" Name="mediaElement1" Width="278" Source="b.wmv" MediaOpened="mediaElement1_MediaOpened" /> <Button Canvas.Left="106" Canvas.Top="275" Height="23" Name="RectButton" Width="75" Background="Pink" Click="RectButton_Click">四角形</Button> <Button Canvas.Left="191" Canvas.Top="275" Height="23" Name="EllipseButton" Width="75" Background="Pink" Click="EllipseButton_Click">円形</Button> <Button Canvas.Left="21" Canvas.Top="275" Height="23" Name="Origin" Width="75" Background="Pink" Click="Origin_Click">通常</Button> <Slider Canvas.Left="21" Canvas.Top="327" Height="17" Name="slider1" Width="75" ValueChanged="slider1_ValueChanged" Maximum="1" Minimum="0" /> <Label Canvas.Left="21" Canvas.Top="302" Height="24" Name="label1" Width="75" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Center" HorizontalContentAlignment="Center">透明度</Label> <Button Canvas.Left="106" Canvas.Top="321" Height="23" Name="Blur" Width="75" Background="Pink" Click="Blur_Click">ぼかし</Button> <Button Canvas.Left="191" Canvas.Top="321" Height="23" Name="Shadow" Width="75" Background="Pink" Click="Shadow_Click">影</Button> <Button Canvas.Left="21" Canvas.Top="367" Height="23" Name="Glow" Width="75" Background="Pink" Click="Glow_Click">Glow</Button> <Button Canvas.Left="106" Canvas.Top="367" Height="23" Name="Emboss" Width="75" Background="Pink" Click="Emboss_Click">Emboss</Button> <Slider Canvas.Left="191" Canvas.Top="367" Height="17" Name="slider2" Width="75" Maximum="360" ValueChanged="slider2_ValueChanged" /> <Label Canvas.Left="191" Canvas.Top="345" FontSize="12" Height="24" HorizontalContentAlignment="Center" Name="label2" Width="75">傾き</Label> <Slider Canvas.Left="21" Canvas.Top="413" Height="21" Name="slider3" Width="75" ValueChanged="slider3_ValueChanged" Minimum="1" /> <Label Canvas.Left="21" Canvas.Top="393" FontSize="12" Height="24" HorizontalContentAlignment="Center" Name="label3" Width="75">拡大</Label> </Canvas> </Grid> </Window>