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, 0, 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();
时间: 2024-10-20 09:23:42

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

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

原文:UWP入门(十二)--数据绑定用法 主要几个元素: Template DataTemplate ItemSource 数据绑定是一个数据提取的方法,能使数据和UI上的控件紧密相连,下面的Demo是这样的: 有许多书的集合,书 类中有图片.标题.作者和ID,把它成现在GridView 控件上,每次点击GridView 的时候动态显示书本信息 github 代码 效果图: 原理图: 1. Template 为GridView 创建一个Template,决定每个独立的图书对象如何呈现在屏幕上 <

iOS Quartz2D绘制线、矩形、弧、圆、文字、图片

利用Quartz2D中提供的图层上下文 Layer Graphics Context,进行简单绘制线.矩形.弧.圆.文字.图片 在storyBoard中得拖入控制器,添加多个UIView控件,并把各个UIView的class修改为自定义的类. 如: 绘制线: // // HJLineView.m // 画线三角矩形圆 // // Created by HJiang on 15/1/2. // Copyright (c) 2015年 HJiang. All rights reserved. //

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

[js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件webpack.config.js详解(上) [js高手之路]深入浅出webpack教程系列3-配置文件webpack.config.js详解(下) [js高手之路]深入浅出webpack教程系列4-插件使用之html-webpack-plugin配置(上) [js高手之路]深入浅出webpack教程系

结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法

结构体中最后一个成员为[0]长度数组的用法:这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势:(1).不需要初始化,数组名直接就是所在的偏移:(2).不占任何空间,指针需要占用int长度空间,空数组不占任何空间.“这个数组不占用任何内存”,意味着这样的结构节省空间:“该数组的内存地址就和它后面的元素地址相同”,意味着无需初始化,数组名就是后面元素的地址,直接就能当指针使用. 这样的写法最适合制作动态buffer,因为可以这样分配空间malloc(sizeof(struc

代码: 两列图片瀑布流(一次后台取数据,图片懒加载。下拉后分批显示图片。图片高度未知,当图片onload后才显示容器)

代码: 两列图片瀑布流(一次后台取数据,无ajax,图片懒加载.下拉后分批显示图片.图片高度未知,当图片onload后才显示容器) [思路]: 图片瀑布流,网上代码有多种实现方式,也有各类插件.没找到合意的,所以根据网上找的一段代码,进行了较大改动. 需引用 zepto 或 jquery. 我这个是应用于手机上的,两列瀑布流,图片高度未知——等图片的onloaded事件触发后,才对容器进行计算和定位. 大容器是 $("#imgList"),容器格子是$(".pin"

如何在GridControl中显示图片列?控件DevExpress.XtraGrid.GridControl中显示图片列。

GridControl一列的ColumnEdit属性中选择PictureEdit,一个RepositoryItemPictureEdit添加完成.列的FieldName设置为Image列名,如img. GridControl绑定的数据,不管是DataTable.List或者其他源,添加一个列,列名为img. 以DataTable为例: Image xx=Image.FromFile("xxx"),yy=Image.FromFile("yyy"); dt.Column

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

在很多情况下,我们网站可能会展示我们的产品图片.以及教程视频等内容,结合一个比较好的图片.视频展示插件,能够使得我们的站点更加方便使用,也更加酷炫,在Github上有很多相关的处理插件可以找来使用,有些效果还非常好,本篇介绍使用图片视频展示插件blueimp Gallery改造网站的视频图片展示,并和之前版本的效果进行对比. 1.blueimp Gallery插件介绍 blueimp Gallery是一个是具有触摸功能,响应式和可定制的图像和视频展示插件,为移动和桌面浏览器做了相关优化,它支持滑

写带有清晰图片的博客:如何将word中的图片复制到windows live writer保持大小不变--清晰度不变

写blog的习惯,先在word写了,复制到windows live writer,再发布到博客园.word中的文章,图片有缩放比例,复制到windows live writer后图片变得不清晰.除了一张一张 设置图片缩放比例为100%外,再复制到windows live writer.这样做太麻烦.就百度了下面的解决办法. word中图片小,复制出来的就不清楚,你需要设置图片大小为原始大小,复制到windows live writer图片才可能清楚. 还需要设置Windows live writ

php将图片保存到mysql数据库及从数据库中读取图片的方法源码 转

php将图片保存到mysql数据库及从数据库中读取图片的方法源码 分类: 网站 2012-03-11 15:25 5059人阅读 评论(0) 收藏 举报 数据库mysqlphpsql serverquerydatabase 一般来讲都是把图片保存到服务器下,然后根据路径读出的,但是有时候出于安全及版权什么的考虑,会把图片保存到mysql的数据库中,然后再读出来,这样的图片点击右键属性,是看不到图片地址的.下面逍遥一生就介绍下如何用php把图片存储到mysql中及如何读出.     MySQL数据