WriteableBitmap 巧学巧用
WriteableBitmap我想大家并不陌生吧,它是一个基于内存的图像管理类,大家可以把它认为图像是一堆存储在内存中的数据,这些数据可由
WriteableBitmap管理和分配。
这里我就给大家讲一些关于
WriteableBitmap的一些使用技巧:
实现自绘
众所周知,目前为止,微软还没有开放自绘接口,如果你真的想在界面上自已绘制一个字符串,都有些困难呢。下面的代码正是使用WriteableBitmap来实现自绘的方案
private void RenderString(WriteableBitmap bitmap, string stringToRender){ TextBlock textBlock = new TextBlock(); textBlock.Text = stringToRender;//设置 font, size,等等 bitmap.Render(textBlock, null); bitmap.Invalidate();}
怎么样,很简单吧,他是通过将TextBlock中的文本绘制到WriteableBitmap来实现的,在这里我发挥一下,那不就可以通过这个方法,来实现一个图片水印的功能么,赶快去试试吧
顺便说一点,这里我要介绍一个更强大的开源的库writeablebitmapex,如果大家想要绘制更复杂的的图像如:点,线,曲线,阴影,形状,以及实现一些常用的图像数据处理功能,那么这个库将是大家
最好的选择。
图像的缩放存储
如果你想将一张图片改变大小,那么你可以用以下的方法去实现
WriteableBitmap resizedImage = new WriteableBitmap(imageToResize);//imageToResize is BitmapImageusing (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) {using (System.IO.IsolatedStorage.IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Create, isf)) {double maxHeight = newWidth;double maxWidth = newHeight;double scaleX = 1;double scaleY = 1;if (pixHt > maxHeight) scaleY = maxHeight / pixHt;if (pixWt > maxWidth) scaleX = maxWidth / pixWt; double scale = Math.Min(scaleY, scaleX);int newWidth1 = Convert.ToInt32(pixWt * scale);int newHeight1 = Convert.ToInt32(pixHt * scale); resizedImage.SaveJpeg(isfs, newWidth1, newHeight1, 0, 70); isfs.Close(); } }
在这里,imageToResize就是你输入的图像,你可以将它存储为目标大小的图像文件
对控件(全屏)进行截图
在很多应用中,如果要对当前页面进行截图,应该怎么办呢,这时WriteableBitmap就能帮助到你了。
把页面截图,并保存到内存
WriteableBitmap wb = new WriteableBitmap(UiRoot, null);//将UI页面的根元素传入,可将当面页面的截图保存到WriteableBitmap
MemoryStream ms = new MemoryStream(); wb.SaveJpeg(ms, myWidth, myHeight, 0, 100);//保存到内存MemoryStream
BitmapImage bmp = newBitmapImage(); //把截图转化为BitmapImage
bmp.SetSource(ms);
using (var isoFileStream =newIsolatedStorageFileStream("myPicture.jpg",FileMode.OpenOrCreate,IsolatedStorageFile.GetUserStoreForApplication())) { wb.SaveJpeg(isoFileStream, myWidth, myHeight,0,100); //把截图存储到独立存储 }
将存储在Sql数据库的图片二进制数据载入到内存
有些时候图片数据是以二进制数据保存到sqlite数据库中的,下面将是,如何把这些二进制数据还原成图像格式
public static byte[] ConvertToBytes(String imageLocation) { StreamResourceInfo sri = Application.GetResourceStream(new Uri(imageLocation, UriKind.RelativeOrAbsolute)); BinaryReader binary = new BinaryReader(sri.Stream); byte[] imgByteArray = binary.ReadBytes((int)(sri.Stream.Length)); binary.Close(); binary.Dispose();return imgByteArray; } public static WriteableBitmap ConvertToImage(Byte[] inputBytes) { MemoryStream ms = new MemoryStream(inputBytes); WriteableBitmap img = new WriteableBitmap(400, 400); img.LoadJpeg(ms); return (img); }
我希望你能喜欢我的文章!如果你有更多想法,请到卤面网 wp7开发论坛(codewp7.com)问答区联系我,我会很高兴知道你在想什么。同时wp7交流QQ群172765887中,也能找到我的身影,感谢大家,也欢迎大家关注我的微薄(www.weibo.com/codewp7)
转载于:https://www.cnblogs.com/sonyye/archive/2012/03/10/2389193.html
WriteableBitmap 巧学巧用相关推荐
- JavaScript巧学巧用
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 由于工作和生活上的一些变化,最近写文章的频率有点下降了,实在不好意思,不过相信不久就会慢慢恢复过来, ...
- 巧学活用html4,新人教英语巧学活用必修一.docx
新人教英语巧学活用-必修 巧学[海用 一.用所给单词的适当形式填空. We are allabout her safety.As far as I am, this caseher.(c oncern ...
- 快速提高数学成绩的奇书《巧学妙解王》高中数学!
<巧学妙解王高中数学>在编写体例上遵循学习规律,让你在学习中得到全面系统的提高.共分六篇. 第一篇 巧学绝技,秒杀技法全解:较详细地介绍了77种高中数学解题方法,这些方法中有大家很熟悉的. ...
- 模拟电路设计入门系列 --- 巧学系列
模拟电路设计入门系列 --- 巧学系列 一. 模拟电路教材 二.二极管.三极管.晶体管 三.电阻.电容工作原理及经验技巧 四.电感相关知识 五.运算放大器经验技巧 六.开关电源 七.电路识图经验技巧 ...
- 巧学宾语从句――宾语从句语法详解 [宾语从句歌诀]
巧学宾语从句――宾语从句语法详解 [宾语从句歌诀] 2011年10月01日 重要提醒:系统检测到您的帐号可能存在被盗风险,请尽快查看风险提示,并立即修改密码. | 关闭 网易博客安全提醒:系统检测到您 ...
- 快速提高物理成绩的奇书《巧学妙解王》高中物理
<巧学妙解王·高中物理>在编写体例上遵循学习规律,让你在学习中得到全面系统的提高.共分四篇. 第一篇 巧学绝技,秒杀技法全解,较详细地介绍了78种高中物理解题方法,这些方法中有大家很熟悉的 ...
- 简学Python第二章__巧学数据结构文件操作
Python第二章__巧学数据结构文件操作 欢迎加入Linux_Python学习群 群号:478616847 目录: 列表 元祖 索引 字典 序列 文件操作 编码与文件方法 本站开始将引入一个新的概 ...
- 计算机巧用剪纸做画册教案,3 巧折巧剪教案公开课一等奖
巧折巧剪 一.教学目标 1. 感受剪纸艺术的美,进一步了解剪纸的艺术特点,学习巧用折剪法进行剪纸创作. 2. 通过折与剪的方式,用对称剪纸的方法,设计制作一张好看的剪纸作品. 3. 感受剪纸的趣味和美 ...
- 巧学活用html4,巧用教材、活用教材
巧用教材.活用教材 福建省福安市赛岐小学 罗鸣亮 有效教学,是当代教学的一个科学理念.它指的是教学要有利于调动学习积极性主动性,有利于学生学会学习,能够在单位教学时间里取得最好的教学效果.教师是课程实 ...
最新文章
- How to Build Your Own Blockchain Part 4.1 — Bitcoin Proof of Work Difficulty Explained
- TensorFlow——基于Keras子类API的fashion-mnist数据集图像分类
- 改进博客园Markdown显示功能(加代码行号、显示代码所用编程语言)
- jzoj4788-[NOIP2016提高A组模拟9.17]序列【差分,贪心】
- glassfish默认密码_在MySQL上使用含盐密码的GlassFish JDBC安全性
- Navicat连接mysql8.0.1版本出现1251--Client
- 在阿里云服务器centOs7系统中部署.NET Core项目
- 45. Use member function templates to accept all compatible types.
- WORD里边替换所有中文
- java常识(小细节)
- C# Udp测试工具开发
- 如何让千牛工作台/阿里旺旺不要自动升级
- python修改pdf元信息 metadata
- 爬虫爬取文件(图片,视频)
- 远程计算机怎么桌面显示不全,桌面显示不全怎么设置
- tomcat的夏时令问题(时区问题)
- 华硕服务器系统安装win7系统教程,华硕K751 U盘装系统win7教程
- 0x00000124蓝屏问题解决方法
- seq2seq模型_推断速度达seq2seq模型的100倍,谷歌开源文本生成新方法LaserTagger
- 论文笔记《Fully Convolutional Networks for Semantic Segmentation》
热门文章
- 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解
- 在GridView里使用CheckBox
- butter滤波器是iir吗_如何快速设计应用一个IIR滤波器
- c语言中元音字母对应的的值,全国计算机等级考试二级C语言南开上机百题改错题第59...
- gdal1.6linux编译,VS2015下编译64位GDAL总结
- java中getlast_Java ArrayDeque getLast()用法及代码示例
- Spring学习之旅(四):面向切面编程(AOP)
- 6-7Pytorch搭建cifar10训练脚本(下)
- mysql load 占位符,mysql:用不存在的数据的占位符初始化摘要表
- mysql 非最佳查询_Mysql 查询优化