---恢复内容开始---

WriteableBitmap 是UWP和WP8.1绘制图片的,重组图片的最重要方法。方法较为简单,方法多样性。

通过查看文档,WriteableBitmap的继承性是   WriteableBitmap : BitmapSource 【BitmapSource : ImageSource】,也就是说WB【WriteableBitmap下文简称】可以直接赋值给Image控件的Source。

用法介绍:

WriteableBitmap WB=new WriteableBitmap(300,300) //这个地方是,宽度,长度。int类型.

方法1SetSourceAsync()

这个方法就是,使用文件的openAsync流就可以了。

 StorageFile file = await StorageFile.GetFileFromPathAsync(filePath);
await wb.SetSourceAsync(await file.OpenAsync(FileAccessMode.ReadWrite));

方法2 PixelBuffer.AsStream().

写入 字节数组,这个方法最为常用。

具体方式是 将 数组通过stream流写入其中。

            using (Stream _stream = wb.PixelBuffer.AsStream())
{
await _stream.WriteAsync(buffer, , buffer.Length);
}

当你完成以上这些步骤之后就是的最后一步就是重绘整个图片。也就是 wb.Invalidate();之后你就直接赋值给Image控件的Source就可以了。

说个要点:

如果你有数组,想重绘图片的时候,新建WB的时候,长宽一定要和图片的长宽一样,或者和展示图片的控件一样长宽。不然会出现花屏,字节长出范围等错误。

如果是绑定的图片,你不要直接用wb,你先新建一个ImageSource,之后 赋值于WB,在用这个ImageSource给其绑定就可以了

获取图片的数组的方法:

首先是打开文件,应用内已知的文件。

 StorageFile imageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///PPAP.jpg", UriKind.Absolute));
IRandomAccessStream accStream = await imageFile.OpenAsync(FileAccessMode.Read);
BitmapDecoder bd = await BitmapDecoder.CreateAsync(accStream);
///获取数据
var imageData = await bd.GetPixelDataAsync();//
//获取二维数组
byte[] buffer = imageData.DetachPixelData();

还有一种方法,也是同样

   RandomAccessStreamReference ras = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///PPAP.jpg", UriKind.Absolute));
var files = await ras.OpenReadAsync();
//解码器
BitmapDecoder bd = await BitmapDecoder.CreateAsync(files.CloneStream());
//两种获取数据的方法
// buffer = new byte[(int)streamToRead.Length];
// streamToRead.Read(buffer, 0, (int)streamToRead.Length);
// await streamToRead.ReadAsync(buffer, 0, (int)streamToRead.Length);
//BitmapTransform transform = new BitmapTransform() //压缩或者放大到与WriteableBitmap长宽一致
// //或者等于显示图片的容器大小
//{
// ScaledHeight = 160, // wb.PixelHeight;
// ScaledWidth = 120, // wb.PixelWidth;
//};
// var imageData = await bd.GetPixelDataAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, transform, ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage);
///获取数据
var imageData = await bd.GetPixelDataAsync();//
//获取二维数组
byte[] buffer = imageData.DetachPixelData();

UWP&WP8.1 重新绘制图片 WriteableBitmap用法 图片转byte[]数组,byte[]数组转图片的更多相关文章

  1. UWP&WP8.1图片照片添加水印

    水印可以自己自己制作,也可以用代码写. 我这里主要写如何添加到照片上面. UWP和WP8.1添加的方法一样.代码是通用的. UWP和WP8.1没有像WPF和WINFROM中darw这样简便的API可以 ...

  2. UWP入门(十二)--数据绑定用法

    原文:UWP入门(十二)--数据绑定用法 主要几个元素: Template DataTemplate ItemSource 数据绑定是一个数据提取的方法,能使数据和UI上的控件紧密相连,下面的Demo ...

  3. [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法

    我们还是接着上文继续,本文我们要讲的是图片资源的打包,图片在静态排版中,经常出现的两个位置是css通过background引入背景,还有一种就是在html模板文件中用img标签引入的方式,如果要在we ...

  4. 使用图片视频展示插件blueimp Gallery改造网站的视频图片展示

    在很多情况下,我们网站可能会展示我们的产品图片.以及教程视频等内容,结合一个比较好的图片.视频展示插件,能够使得我们的站点更加方便使用,也更加酷炫,在Github上有很多相关的处理插件可以找来使用,有 ...

  5. 七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解

    [图片引用方向纠正]直接在图片后面添加 ?imageMogr/auto-orient eg:http://data.upfitapp.com/data/2016/10/18/1629114767606 ...

  6. [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html  这个可以实现ImageView异步加载 ...

  7. 图片上传并显示(兼容ie),图片大小判断

    图片上传并显示(兼容ie),图片大小判断 HTML <div id="swf" style="margin: 0 auto;text-align: center;& ...

  8. 解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移

    解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移 解决办法1:设置tabBarItem的imageInsets属性 代码示例: childContro ...

  9. jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动

    jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动 http://www.17sucai.com/pins/demoshow/382

随机推荐

  1. springBoot专题3---->springBoot与多数据源的配置

    最近有点忙,更新有点慢.今天进来说说一说springBoot中如何配置多数据源. 第一,新建一个名为springBoot-mutidata的maven项目,完整的pom.xml配置如下: <?x ...

  2. 【Java EE 学习 32 上】【JQuery】【选择器】

    一.JQuery简介 1.JQuery是JavaScript库,封装了很多预定义对象和实用函数. 2.JQury的优势: (1)简洁,其宗旨就是写更少的代码做更多的事. (2)文档声明非常全面:htt ...

  3. jquery 事件冒泡的介绍以及如何阻止事件冒泡

    在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级 ...

  4. 解决rand()伪随机数

    利用time改变种子 例: #include <stdlib.h> #include <stdio.h> #include <time.h>//使用当前时钟做种子 ...

  5. html学习第一天笔记——第六章节

    <input type="reset" value="重置"> 使用重置按钮,重置表单信息<input type="submit&q ...

  6. 如何在Ubuntu 14.04服务器上自动化部署Spring Boot的应用

    https://segmentfault.com/a/1190000003944843

  7. 转载:Tomcat的JVM设置和连接数设置

    Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx512m Linux环境下修 ...

  8. aps.net cored 新概念

    Tag Helpers The EnvironmentTagHelper can be used to include different scripts in your views (for exa ...

  9. SQLite部署-无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块

    近期刚使用SQLite,主要引用的是System.Data.SQLite.dll这个dll,在部署到测试环境时报无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块. (异常来 ...

  10. MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划

    这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...