Window Phone7中SL开发中的位图和从相机获取图片

在SL中位图可指向一个图像,图像其实又可能是位图或者矢量图,SL中主要使用Image元素来显示位图。

SL模式下只支持JPEG和PGn两种格式

这个文章主要介绍从各种资源中获取位图,显示位图

1.使用Image控件读取本地图片

在项目中新建一个文件夹Images,然后添加一个png图片到这个文件夹中,添加后点击右键查看属性“生成操作”=“资源resource”。注意这个地方

<Image Source="Images/test.png" Width="100" Height="100"></Image>

这样就可以显示这个test.png图片,默认情况下image控件会使用伸展属性(Stretch)来扩充这个图片到最大。

Stretch有4个不同的值,不用不同的填充方式来显示图片

2.使用image读取网络图片

直接把图片的网络地址赋值给source就可以

<Image Source="http://XXXXXX.jpg" Width="100" Height="100"></Image>

Image控件有ImageOpened和ImageFailed两个事件,可以来判断是否加载成功。

Image的属性Source不是字符串类型,而是ImageSource类。

ImageSource是一个抽象类,派生有BitmapSource ,这个继而派生BitMapImage

cs代码给Image控件赋值如下

Uri uri = new Uril("图片地址路径,或者网络路径");

BitmapImage bmp= new BitMapImage(uri);

img.Source = bmp;

或者

Uri uri = new Uril("图片地址路径,或者网络路径");

  StreamResourceInfo resourceInfo = Application.GetResourceStream(uri);

            BitmapImage bmp = new BitmapImage();

            bmp.SetSource(resourceInfo.Stream);

img.Source = bmp;

 

//如果图片文件是资源属性,在cs代码使用下面的语法

             Uri uri = new Uri("/PhoneApp1;component/Images/test.png", UriKind.RelativeOrAbsolute);

3。图片资源文件的属性

添加一个图片文件到vs项目中的时候,查看属性中的“生成操作”默认是“Resource资源”。

如果使用这个方式,图片文件会当作资源被打包到项目的dll文件或者exe文件中

如果把“生成操作”修改成“Content内容”,这个时候图片文件和所在的文件夹,会被复制到生成的目录中(默认debug文件夹中),可以独立的查看

一般情况下图片数量比较少,而且又小,可以当做资源文件随程序一起分发。

如果图片数量比较大,又比较大,可以考虑当做内容属性,独立的存储。如果都打包的程序中,会使程序启动比较慢

4.裁剪图片,模糊化图片

裁剪图片,通过指定图片的某个几何区域,只显示图片这个区域内的内容

图片有个Clip属性可以完成这个工作

 <Image Source="Images/test.png" >
            <Image.Clip>
                <EllipseGeometry RadiusX="100" RadiusY="200" Center="180,180"></EllipseGeometry>
  </Image.Clip>

模糊化图片只的对图片部分位置模糊化,形成特定的效果OpacityMask

  <Image.OpacityMask>
                <RadialGradientBrush GradientOrigin="0.5,0.5"
Center="0.5,0.5"
RadiusX="0.5"
RadiusY="0.5">
                    <!-- These Gradient Stop colors are only changing the
alpha values so the image fades out toward the edges. -->
                    <GradientStop Color="#ffffffff" Offset="0.5" />
                    <GradientStop Color="#00ffffff" Offset="0.8" />
                </RadialGradientBrush>
            </Image.OpacityMask>

从相机获取图片

在window.Phone.Task下有几个选择器(Chooser)和启动器(Launcher),选择器可以返回数据,启动器不返回数据。

CameraCaptureTask是一个选择器,定义了Completed方法和show方法。completed方法执行的时候表示相机程序被调用了,返回的PhoneResult方法包含了一个照片的Stream对象。

show方法用来显示相机程序

  CameraCaptureTask camer = new CameraCaptureTask();
        // 构造函数
        public MainPage()
        {
            InitializeComponent();

            camer.Completed += new EventHandler<PhotoResult>(camer_Completed);
        }

        void camer_Completed(object sender, PhotoResult e)
        {
            if (e.TaskResult == TaskResult.OK)
            {
                BitmapImage bmp = new BitmapImage();
                bmp.SetSource(e.ChosenPhoto);
                Img1.Source = bmp;
            }
            
        }
原文地址:https://www.cnblogs.com/zjypp/p/2336343.html