前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Silverlight 3.0 中的 WriteableBitmap

Silverlight 3.0 中的 WriteableBitmap

作者头像
用户1172164
发布2018-01-16 10:39:19
5850
发布2018-01-16 10:39:19
举报
文章被收录于专栏:我和未来有约会

Silverlight 3.0 中的 WriteableBitmap

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

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

使用WriteableBitmap

代码语言:js
复制
 <Grid x:Name="LayoutRoot">
      <Image x:Name="optImage" Margin="271,8,0,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>
代码语言:js
复制
        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来呈现位图)

代码语言:js
复制
        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();
        }

扩展

WriteableBitmap转Jpg

http://rhlopez.com/blog/post/2009/07/17/Silverlight-3-WriteableBitmap-to-Jpg.aspx

WriteableBitmap转PNG http://blogs.msdn.com/jstegman/archive/2008/04/21/dynamic-image-generation-in-silverlight.aspx

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009-10-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档