UWP&WP8.1 重新绘制图片 WriteableBitmap用法 图片转byte[]数组,byte[]数组转图片
---恢复内容开始---
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[]数组转图片的更多相关文章
- UWP&WP8.1图片照片添加水印
水印可以自己自己制作,也可以用代码写. 我这里主要写如何添加到照片上面. UWP和WP8.1添加的方法一样.代码是通用的. UWP和WP8.1没有像WPF和WINFROM中darw这样简便的API可以 ...
- UWP入门(十二)--数据绑定用法
原文:UWP入门(十二)--数据绑定用法 主要几个元素: Template DataTemplate ItemSource 数据绑定是一个数据提取的方法,能使数据和UI上的控件紧密相连,下面的Demo ...
- [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法
我们还是接着上文继续,本文我们要讲的是图片资源的打包,图片在静态排版中,经常出现的两个位置是css通过background引入背景,还有一种就是在html模板文件中用img标签引入的方式,如果要在we ...
- 使用图片视频展示插件blueimp Gallery改造网站的视频图片展示
在很多情况下,我们网站可能会展示我们的产品图片.以及教程视频等内容,结合一个比较好的图片.视频展示插件,能够使得我们的站点更加方便使用,也更加酷炫,在Github上有很多相关的处理插件可以找来使用,有 ...
- 七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解
[图片引用方向纠正]直接在图片后面添加 ?imageMogr/auto-orient eg:http://data.upfitapp.com/data/2016/10/18/1629114767606 ...
- [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html 这个可以实现ImageView异步加载 ...
- 图片上传并显示(兼容ie),图片大小判断
图片上传并显示(兼容ie),图片大小判断 HTML <div id="swf" style="margin: 0 auto;text-align: center;& ...
- 解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移
解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移 解决办法1:设置tabBarItem的imageInsets属性 代码示例: childContro ...
- jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动
jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动 http://www.17sucai.com/pins/demoshow/382
随机推荐
- 【Android】命令行jarsigner签字和解决找不到证书链错误
1.签名失败 $jarsigner -verbose -keystore /Volumes/Study/resourcesLib/Qunero-achivements/AndroidApp/QuLor ...
- Hdu5093 Battle ships 二分图
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission( ...
- HDU5322 Hope(DP + CDQ分治 + NTT)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5322 Description Hope is a good thing, which can ...
- 【Oracle】oracle取最大值和最小值的几个方法汇总
(1)oracle使用keep分析函数取最值记录 -- 取工资sal最大的雇员姓名及其工资,以及工资sal最少的雇员姓名及其工资 select deptno, empno, ename, sal, m ...
- Apple Pay--iOS开发
一.什么是Apple Pay? 1. 概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在iPhone 6, 6p等设备上的信用卡和借 ...
- JavaScript使用接口
在经典的Java面向对象语言中,可以用关键字interface来定义接口,用implement来实现接口,而JavaScript虽然也是面向对象语言,但是它并没有内置这些,不过由于JavaScript ...
- yy_model及 YYLabel
一, yy_model 1.yy_model 可以存放包含数组的属性,调用方法如下: + (NSDictionary *)modelCustomPropertyMapper { return @{@& ...
- ZeroMQ接口函数之 :zmq_ctx_destroy - 销毁一个ZMQ环境上下文
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_destroy zmq_ctx_destroy(3) ØMQ Manual - ØMQ/3.2.5 Nam ...
- Android Studio插件美化Android Studio,文艺清新范
一:重新定义你工作区的颜色 1:原生的工作区文字的颜色反人类,来这个网站下载自己喜欢的主题:http://www.riaway.com/ 轻松定义:下载后是个jar包. 2:导入jar包 file ...
- css 温故而知新 定位(position)与权限(z-index)
1.进行定位(position)的元素的权限(z-index)永远比没有定位的高. 2.如果两个元素都定位了,无论是相对定位还是绝对定位.他们的权限都是等权的. 3.两个相同定位的元素,除了z-ind ...