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 巧学巧用相关推荐

  1. JavaScript巧学巧用

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 由于工作和生活上的一些变化,最近写文章的频率有点下降了,实在不好意思,不过相信不久就会慢慢恢复过来, ...

  2. 巧学活用html4,新人教英语巧学活用必修一.docx

    新人教英语巧学活用-必修 巧学[海用 一.用所给单词的适当形式填空. We are allabout her safety.As far as I am, this caseher.(c oncern ...

  3. 快速提高数学成绩的奇书《巧学妙解王》高中数学!

    <巧学妙解王高中数学>在编写体例上遵循学习规律,让你在学习中得到全面系统的提高.共分六篇. 第一篇 巧学绝技,秒杀技法全解:较详细地介绍了77种高中数学解题方法,这些方法中有大家很熟悉的. ...

  4. 模拟电路设计入门系列 --- 巧学系列

    模拟电路设计入门系列 --- 巧学系列 一. 模拟电路教材 二.二极管.三极管.晶体管 三.电阻.电容工作原理及经验技巧 四.电感相关知识 五.运算放大器经验技巧 六.开关电源 七.电路识图经验技巧 ...

  5. 巧学宾语从句――宾语从句语法详解 [宾语从句歌诀]

    巧学宾语从句――宾语从句语法详解 [宾语从句歌诀] 2011年10月01日 重要提醒:系统检测到您的帐号可能存在被盗风险,请尽快查看风险提示,并立即修改密码. | 关闭 网易博客安全提醒:系统检测到您 ...

  6. 快速提高物理成绩的奇书《巧学妙解王》高中物理

    <巧学妙解王·高中物理>在编写体例上遵循学习规律,让你在学习中得到全面系统的提高.共分四篇. 第一篇 巧学绝技,秒杀技法全解,较详细地介绍了78种高中物理解题方法,这些方法中有大家很熟悉的 ...

  7. 简学Python第二章__巧学数据结构文件操作

    Python第二章__巧学数据结构文件操作 欢迎加入Linux_Python学习群  群号:478616847 目录: 列表 元祖 索引 字典 序列 文件操作 编码与文件方法 本站开始将引入一个新的概 ...

  8. 计算机巧用剪纸做画册教案,3 巧折巧剪教案公开课一等奖

    巧折巧剪 一.教学目标 1. 感受剪纸艺术的美,进一步了解剪纸的艺术特点,学习巧用折剪法进行剪纸创作. 2. 通过折与剪的方式,用对称剪纸的方法,设计制作一张好看的剪纸作品. 3. 感受剪纸的趣味和美 ...

  9. 巧学活用html4,巧用教材、活用教材

    巧用教材.活用教材 福建省福安市赛岐小学 罗鸣亮 有效教学,是当代教学的一个科学理念.它指的是教学要有利于调动学习积极性主动性,有利于学生学会学习,能够在单位教学时间里取得最好的教学效果.教师是课程实 ...

最新文章

  1. How to Build Your Own Blockchain Part 4.1 — Bitcoin Proof of Work Difficulty Explained
  2. TensorFlow——基于Keras子类API的fashion-mnist数据集图像分类
  3. 改进博客园Markdown显示功能(加代码行号、显示代码所用编程语言)
  4. jzoj4788-[NOIP2016提高A组模拟9.17]序列【差分,贪心】
  5. glassfish默认密码_在MySQL上使用含盐密码的GlassFish JDBC安全性
  6. Navicat连接mysql8.0.1版本出现1251--Client
  7. 在阿里云服务器centOs7系统中部署.NET Core项目
  8. 45. Use member function templates to accept all compatible types.
  9. WORD里边替换所有中文
  10. java常识(小细节)
  11. C# Udp测试工具开发
  12. 如何让千牛工作台/阿里旺旺不要自动升级
  13. python修改pdf元信息 metadata
  14. 爬虫爬取文件(图片,视频)
  15. 远程计算机怎么桌面显示不全,桌面显示不全怎么设置
  16. tomcat的夏时令问题(时区问题)
  17. 华硕服务器系统安装win7系统教程,华硕K751 U盘装系统win7教程
  18. 0x00000124蓝屏问题解决方法
  19. seq2seq模型_推断速度达seq2seq模型的100倍,谷歌开源文本生成新方法LaserTagger
  20. 论文笔记《Fully Convolutional Networks for Semantic Segmentation》

热门文章

  1. 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解
  2. 在GridView里使用CheckBox
  3. butter滤波器是iir吗_如何快速设计应用一个IIR滤波器
  4. c语言中元音字母对应的的值,全国计算机等级考试二级C语言南开上机百题改错题第59...
  5. gdal1.6linux编译,VS2015下编译64位GDAL总结
  6. java中getlast_Java ArrayDeque getLast()用法及代码示例
  7. Spring学习之旅(四):面向切面编程(AOP)
  8. 6-7Pytorch搭建cifar10训练脚本(下)
  9. mysql load 占位符,mysql:用不存在的数据的占位符初始化摘要表
  10. mysql 非最佳查询_Mysql 查询优化