微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight 3.0 中的 WriteableBitmap

 

2009-10-18 20:58 by nasa,508 visits,网摘,收藏,编辑

Silverlight 3.0 中的 WriteableBitmap

尽管矢量图形非常的强大但是在有些情况下还是需要用到位图,因为他们在运行时能得到更高的执行效率和渲染效果。在Silverlight 2.0中获得位图的唯一途径就是从服务器下载并将其嵌入到一个Image元素上。

在Silverlight 3.0中添加一个新的图形类,WriteableBitmap。他可以动态的呈现位图,再结合上矢量图形一起运用, 对于拍摄视频播放快照、生成算法内容(如分形图像)和数据可视化(如音乐可视化应用程序)很有用。也可以多次呈现位图,要使用Render方法,若是使用Render需要调用Invalidate来呈现位图。

使用WriteableBitmap
   < Grid  x:Name ="LayoutRoot" >
      
< Image  x:Name ="optimage"  Margin ="271,8,0"  VerticalAlignment ="Top"  Width ="240"  Stretch ="None"  Height ="143"  HorizontalAlignment ="Left" />
      
< StackPanel  HorizontalAlignment ="Left"  Width ="267"  Orientation ="Vertical"  d:LayoutOverrides ="Height" >
          
< MediaElement  x:Name ="myMediaElement"  Source ="ice.mp4"  Stretch ="None"  Height ="132"  Margin ="0"  CurrentStateChanged ="myMediaElement_CurrentStateChanged" />
          
< StackPanel  Margin ="0"  Orientation ="Vertical"  d:LayoutOverrides ="Width" >
              
< Button  x:Name ="Screenshot"  Content ="Screenshot"  Click ="Screenshot_Click" />
              
< ScrollViewer  x:Name ="ScreenshotViewer"  Height ="325"  Margin ="0" >
                  
< StackPanel  x:Name ="thumbs" />
              
</ ScrollViewer >
          
</ StackPanel >
      
</ StackPanel >
  
</ Grid >

         private   void  Screenshot_Click( object  sender, System.Windows.RoutedEventArgs e)
        {
            
//  创建一个WriteableBitmap并且把需要呈现位图的元素赋值给WriteableBitmap
            WriteableBitmap wb  =   new  WriteableBitmap(myMediaElement,  null );

            
//  创建一个Image元素来承载位图
            Image image  =   new  Image();
            image.Height 
=   64 ;
            image.Margin 
=   new  Thickness( 5 );
            image.source 
=  wb;

            
//  将Image元素放入容器控件中
            thumbs.Children.Add(image);

            ScreenshotViewer.ScrollToVerticalOffset(ScreenshotViewer.ExtentHeight);

        }

 

多次呈现
这里使用一个Timer来多次呈现位图( 要使用Render方法需要调用Invalidate来呈现位图
        dispatcherTimer timer;
        WriteableBitmap wbopt;
        
public  MainPage()
        {
            InitializeComponent();

            timer 
=   new  dispatcherTimer();
            timer.Interval 
=  TimeSpan.FromMilliseconds( 10 );
            timer.Tick 
+=   new  EventHandler(Render_Video);
            wbopt 
=   new  WriteableBitmap( 240 , 143 );
            optimage.source 
=  wbopt;

            timer.Start();
        }

        
void  Render_Video( object  sender, EventArgs e)
        {
            wbopt.Render(myMediaElement, 
null );
            wbopt.Invalidate();
        }


扩展
下载

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐