windowsphone8.1学习笔记之位图编程
说位图,先把image控件简单过下,Image的Source设置
- <Image Name="img" Source="可以是网络图片的Uri、应用文件的Uri或者安装包文件的Uri" />
- img.Source = new BitmapIamge(new Uri(同上));
Image的Stretch属性指定图像如何填充,枚举定义:
None,图像不拉伸,一合适尺寸显示;
Uniform,保留图像的纵横比,按控件的大小输出图像;
UnifToFill,已原始大小比填充;
Fill,将整个图完全填充到控件中
Clip属性是UIElement的属性,所以所有的UI对象都有,Clip属性可用来剪切图像
- <Grid Background="Black" PointerMoved="Grid_PointerMoved"> <Image Name="ContentPanel" Source="ms-appx:///Assets/Logo.scale-240.png"> <Image.Clip> <RectangleGeometry x:Name="geometry" Rect="0,0,150,150" /> </Image.Clip> </Image> </Grid>
- private void Grid_PointerMoved(object sender, PointerRoutedEventArgs e) { Point p = e.GetCurrentPoint(ContentPanel).Position; geometry.Rect = new Rect(p.X, p.Y, 150, 150); }
效果图,就不切了,自己下来弄下,就知道了。我们截取了图像,如何生成图片呢?使用RenderTragetBitmap类
- //PointerReleased可以捕获单击事件
- private async void root_PointerReleased(object sender, PointerRoutedEventArgs e)
- {
- //创建RenderTargetBitmap对象
- RenderTargetBitmap bitmap = new RenderTargetBitmap();
- //root为UIElement的Name
- await bitmap.RenderAsync(root);
- img.Source = bitmap;
- }
生成图片之后,就是存储图片了,存储图片就需要获得图像的二进制数据,然后通过BitmapEncoder类实现对图像的创建、编辑和保存的各种方法。示例如下:
- <Grid Name="root">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto" />
- <RowDefinition Height="*" />
- <RowDefinition Height="Auto" />
- </Grid.RowDefinitions>
- <StackPanel Name="TitlePanel" Margin="10,35,10,10">
- <TextBlock Text=" />
- <TextBlock Text=" />
- </StackPanel>
- <Grid Name=" Margin="10,0,10,10">
- <Image Name="img" />
- </Grid>
- <Grid Grid.Row=">
- <Grid.ColumnDefinitions>
- <ColumnDefinition />
- <ColumnDefinition />
- </Grid.ColumnDefinitions>
- <Button VerticalAlignment="Center" HorizontalAlignment="Center" Content="获取图像" Click="Button_Click_1" />
- <Button VerticalAlignment=" />
- </Grid>
- </Grid>
- private void Button_Click(object sender, RoutedEventArgs e)
- {
- img.Source = new BitmapImage(new Uri("ms-appdata:///local/testBitmap.png",UriKind.Absolute));
- }
- private async void Button_Click_1(object sender, RoutedEventArgs e)
- {
- //创建要存储的文件,这个不需多说了。
- var storageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("testBitmap.png", CreationCollisionOption.OpenIfExists);
- RenderTargetBitmap bitmap = new RenderTargetBitmap();
- await bitmap.RenderAsync(root);
- //获取图像的二进制数据
- var pixelBuffer = await bitmap.GetPixelsAsync();
- using (var fileStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite))
- {
- var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream);
- encoder.SetPixelData(
- BitmapPixelFormat.Bgra8,//像素格式
- BitmapAlphaMode.Ignore,//像素数据的alpha模式,定义透明的
- (uint)bitmap.PixelWidth,//像素宽
- (uint)bitmap.PixelHeight,//像素高
- DisplayInformation.GetForCurrentView().LogicalDpi,//像素水平分辨率,这个就是获取设备的屏幕分辨率的方法
- DisplayInformation.GetForCurrentView().LogicalDpi,//像素垂直分辨率
- pixelBuffer.ToArray());//像素数据
- await encoder.FlushAsync();
- }
- await new MessageDialog("获取图像成功并已保存").ShowAsync();
- }
好了,位图编程就到这儿。
windowsphone8.1学习笔记之位图编程的更多相关文章
- 孙鑫VC学习笔记:多线程编程
孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified ...
- Hadoop学习笔记(7) ——高级编程
Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...
- WCF学习笔记之事务编程
WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- Python学习笔记6 函数式编程_20170619
廖雪峰python3学习笔记: # 高阶函数 将函数作为参数传入,这样的函数就是高阶函数(有点像C++的函数指针) def add(x, y): return x+y def mins(x, y): ...
- IOS学习笔记之 Socket 编程
最近开始静心学习IOS编程,虽然起步有点晚,但有句话说的好:“如果想去做,任何时候都不晚”.所以在今天,开始好好学习IOS.(本人之前4年都是搞.Net的,java也培训过一年) 打算学IOS,从哪入 ...
- javascript 学习笔记之模块化编程
题外: 进行web开发3年多了,javascript(后称js)用的也比较多,但是大部分都局限于函数的层次,有些公共的js函数可重用性不好,造成了程序的大量冗余,可读性差(虽然一直保留着注释的习惯,但 ...
- javascript 学习笔记之面向对象编程(一):类的实现
~~想是一回事,做是一回事,写出来又是一回事~~一直以来,从事C++更多的是VC++多一些,从面向过程到面向对象的转变,让我对OO的编程思想有些偏爱,将一个客观存在的规律抽象出来总是让人比较兴奋,通过 ...
随机推荐
- 资源的GPUAddress
BufferAddress CommandHandle TextureHandle 给shader采样的 ImageHandle 给shader load store的.../imageLoad() ...
- ECSHOP商品描述和文章里不加水印,只在商品图片和商品相册加水印
fckeditor\editor\filemanager\connectors\php //判断并给符合条件图片加上水印 if ($**tension == 'jpg' || $**tension = ...
- 数据库中存在0,1,2.....或者1,null,2 排序时让0或者null在最后的sql语句
select * from yryz_products_t order by isnull(sort),sort; select * from yourtable order by cast ...
- 在MyEclipse上安装GIT插件EGit
MyEclipse2016 CI 下载地址:http://pan.baidu.com/s/1gfBw9Ab 1.“Help”->"Install from Site" 2.在 ...
- Oracle基础 PL-SQL编程基础(2) 分支结构
一.分支结构 1.if语句 语法: IF <布尔表达式> THEN PL/SQL和SQL语句 END IF; 示例: DECLARE v_count NUMBER := &n; B ...
- 你真的了解装箱(Boxing)和拆箱(Unboxing)吗?
所谓装箱就是装箱是将值类型转换为 object 类型或由此值类型实现的任一接口类型的过程.而拆箱就是反过来了.很多人可能都知道这一点,但是是否真的就很了解boxing和unboxing了呢?可以看下下 ...
- STL学习笔记(第二章 C++及其标准程序库简介)
本章重点是介绍与C++标准程序库相关的几个最重要的语言新特性 template(模板) 程序库中几乎所有东西都被设计成template形式.所谓templates,是针对“一个或多个尚未明确的型别”所 ...
- iOS仿支付宝首页的刷新布局效果
代码地址如下:http://www.demodashi.com/demo/12753.html XYAlipayRefreshDemo 运行效果 动画效果分析 1.UI需要变动,向上滑动的时候,顶部部 ...
- xcode几个常用的快捷键
command + ctrl + e 修改变量的名称:选中某个变量,按下该快捷键,可以批量修改对应的变量名称 command + shift + j 定位到文档导航界面,然后通过上下方向键,可以快 ...
- Cocos2d-x教程(35)-三维拾取Ray-AABB碰撞检測算法
欢迎增加Cocos2d-x 交流群:193411763 转载时请注明原文出处 :http://blog.csdn.net/u012945598/article/details/39927911 --- ...