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的编程思想有些偏爱,将一个客观存在的规律抽象出来总是让人比较兴奋,通过 ...
随机推荐
- P6 EPPM 16 R1安装和配置文档
白桃花心木P6企业项目组合管理文档库 描述 链接 下载 零件号 16 R1用户和集成文档 查看库 下载 E68199-01 16 R1安装和配置文档 查看库 下载 E68198-01 描述 链接 ...
- Sublime Text 3 文档
中文版:http://feliving.github.io/Sublime-Text-3-Documentation/ 英文版:http://www.sublimetext.com/docs/3/
- mysql ubuntu 开启3306端口,设置远程访问
远程登陆数据库的时候出现了下面出错信息 :ERROR 2003 ( HY000 ) : Can 't connect to MySQL server on ' xxx.xxx.xxx.xxx ',经过 ...
- 为php5.6.30安装redis扩展
1.下载phpredis3.1.2 https://github.com/phpredis/phpredis/releases/tag/3.1.2 2.解压后在phpredis3.1.2目录下执行 / ...
- foreach 加& 什么意思?
foreach 加&遍历的同时改变原数组即修改数据或者增加数据 foreach 加& 什么意思? 注意:如果我要改变数组某一个值 直接遍历的话原数组是不会变的 下面提供两种方法 1.我 ...
- 关于XSuperMES项目使用的PDF框架
我在曾经的项目中使用的是pdfbox.在读取中文文档时能够读出大部分的文字,可是在数字.分页等地方还是不可避免的出现乱码. 于是我在网上搜索,看有没有什么解决方法.看到有说法: "PDFBo ...
- ListView知识点汇总(9.2)
1 最为基础的listview: http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html http://blog.csdn.net/h ...
- asp.net core mvc视频A:笔记3-4.母版页与部分视图
新建项目3.4, 新建一个共享文件,一般存放在Shared目录下方 选择 如果安装了Reshaper插件可以这样添加(插件在本人博客中找) 代码 创建一个空的控制器TestController 使用布 ...
- About the Apple Captive Network Assistant
If you’re a mac user, you likely have seen a strange popup window appear on your computer when you t ...
- mysql设置主从同步
1.主从同步定义 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave).因为复制是异步进行的,所以从服 ...