设为首页 收藏本站
查看: 1271|回复: 0

Windows Phone 7 位图BitmapImage和WriteableBitmap

[复制链接]

尚未签到

发表于 2015-5-9 06:46:33 | 显示全部楼层 |阅读模式
  继承关系
  Object
    DependencyObject (abstract)
          ImageSource (abstract)
              BitmapSource (abstract)
                  BitmapImage
                  WriteableBitmap
  
一、WriteableBitmap 类
提供一个可写入并可更新的 BitmapSource。 BitmapSource 是 Silverlight 图像处理管线的基本构造块,从概念上说表示具有特定大小和分辨率的单个不变的像素集。
命名空间:  System.Windows.Media.Imaging
使用 WriteableBitmap 类基于每个框架来更新和呈现位图。 这对于生成算法内容(如分形图像)和数据可视化(如音乐可视化工
  具)很有用。
  实例:点击程序屏幕不断地获取屏幕图像嵌套进去
DSC0000.jpg





            
            
        



        public MainPage()
        {
            InitializeComponent();
        }
        protected override void OnManipulationStarted(ManipulationStartedEventArgs args)
        {
            img.Source = new WriteableBitmap(this, null);// 使用element 和 transform来创建一个WriteableBitmap

            args.Complete();
            args.Handled = true;
            base.OnManipulationStarted(args);
        }
  public WriteableBitmap(UIElement element, Transform transform) 这个构造函数。element 是要在位图中呈现的元素;transform 是用户在绘制到位图之前最后一步应用到元素的变换。如果您希望位图将元素的变换考虑在内,则这对于您特别有意义。此值可为 null。
  这个 WriteableBitmap 构造函数适用于绝大多数的"复制内容"方案。这个构造函数可生成在保留内容基础下,尽量减少空白的 PBGRA32格式(采用32BPP的一种基于sRGB的像素格式)的  WriteableBitmap。它把 element 的各种变化都考虑进去了,这些变化包括:Clip,Effect,Opacity,OpacityMask,Children。当然还有一些变化没有包含,这时候,我们可以对他的父控件进行截屏,就可以扑捉到这些没有包括的变化。另外:WriteableBitmap 不能呈现弹出式控件,如 Popup、ComboBox 和 ToolTip。
  二、BitmapImage 类
  Silverlight 提供一个经优化以使用可扩展应用程序标记语言 (XAML) 上载图像的专用 BitmapSource。
命名空间:  System.Windows.Media.Imaging
XAML
BitmapImage 主要支持可扩展应用程序标记语言 (XAML) 语法,并为尚未由 BitmapSource 定义的位图加载引入附加属性。
  BitmapImage 实现 ISupportInitialize 接口,以对多个属性的初始化进行优化。 只能在对象初始化过程中进行属性更改。 调用 BeginInit 以表示初始化开始;调用 EndInit 以表示初始化结束。 初始化后,将忽略属性更改。
  使用 BitmapImage 构造函数创建的 BitmapImage 对象将自动初始化,且将忽略对属性的更改。
  示例
  XAML


   
      
   

  实例:分裂图片--通过选择器选择一张照片放进BitmapImage里面然后利用WriteableBitmap将图片分成4块
DSC0001.jpg DSC0002.jpg DSC0003.jpg





            
            
               
                    
                    
               
               
                    
                    
               
               
               
               
               
            
        



using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Tasks;
namespace SubdivideBitmap
{
    public partial class MainPage : PhoneApplicationPage
    {
        PhotoChooserTask photoChooser = new PhotoChooserTask();//创建一个相片选择器  用来选择一张图片
      
        public MainPage()
        {
            InitializeComponent();
            photoChooser.Completed += OnPhotoChooserCompleted;//添加选择器的完成事件
        }
        //点击程序屏幕选择图片
        protected override void OnManipulationStarted(ManipulationStartedEventArgs args)
        {
            int dimension = (int)Math.Min(ContentPanel.ActualWidth,
                                          ContentPanel.ActualHeight) - 8;
            //设置选择图片的宽度高度
            photoChooser.PixelHeight = dimension;
            photoChooser.PixelWidth = dimension;
            photoChooser.Show();
            args.Complete();
            args.Handled = true;
            base.OnManipulationStarted(args);
        }
        //完成选择图片触发的事件
        void OnPhotoChooserCompleted(object sender, PhotoResult args)
        {
            if (args.Error != null || args.ChosenPhoto == null)//没有选择图片则返回跳出该方法
                return;
            //创建BitmapImage来存储选择器的图片
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.SetSource(args.ChosenPhoto);
            Image imgBase = new Image();
            imgBase.Source = bitmapImage;
            imgBase.Stretch = Stretch.None;
            // 左上部分
            WriteableBitmap writeableBitmap =
                new WriteableBitmap(bitmapImage.PixelWidth / 2,
                                    bitmapImage.PixelHeight / 2);
            writeableBitmap.Render(imgBase, null);
            writeableBitmap.Invalidate();
            imgUL.Source = writeableBitmap;
            //右上部分
            writeableBitmap = new WriteableBitmap(bitmapImage.PixelWidth / 2,
                                                  bitmapImage.PixelHeight / 2);
            TranslateTransform translate = new TranslateTransform();
            translate.X = -bitmapImage.PixelWidth / 2;//在绘制到位图中之前应用到元素的变换
            writeableBitmap.Render(imgBase, translate);//在位图中呈现元素
            writeableBitmap.Invalidate();//请求重绘整个位图
            imgUR.Source = writeableBitmap;
            // 左下部分
            writeableBitmap = new WriteableBitmap(bitmapImage.PixelWidth / 2,
                                                  bitmapImage.PixelHeight / 2);
            translate.X = 0;
            translate.Y = -bitmapImage.PixelHeight / 2;
            writeableBitmap.Render(imgBase, translate);
            writeableBitmap.Invalidate();
            imgLL.Source = writeableBitmap;
            // 右下部分
            writeableBitmap = new WriteableBitmap(bitmapImage.PixelWidth / 2,
                                                  bitmapImage.PixelHeight / 2);
            translate.X = -bitmapImage.PixelWidth / 2;
            writeableBitmap.Render(imgBase, translate);
            writeableBitmap.Invalidate();
            imgLR.Source = writeableBitmap;
            txtblk.Visibility = Visibility.Collapsed;//隐藏刚开始的文本
        }
    }
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-65093-1-1.html 上篇帖子: Windows Phone 7 多点触摸编程 下篇帖子: Windows Phone 7 Silverlight控件一览
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表