WriteableBitmap 巧学巧用

分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

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)

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

原文地址:https://www.cnblogs.com/sjwudhwhhw/p/10509622.html

时间: 2024-10-18 21:11:19

WriteableBitmap 巧学巧用的相关文章

JavaScript巧学巧用

前言 由于工作和生活上的一些变化,最近写文章的频率有点下降了,实在不好意思,不过相信不久就会慢慢恢复过来,感谢大家一直以来的关注和支持. 本文主要给大家分享一下在编写JavaScript代码的时候存在的一些方法和技巧,虽然有时候条条大路都通向罗马,但是也许总会有那么一条最短的路径可走.希望通过以下几点JavaScript技巧让大家的代码"化繁为简,化简为精". 巧学巧用 1. new Set() 可能有人知道ES6中提供了新的数据结构 Set,但是能够灵活运用的人或许不多.利用Set数

System V三种IPC编程巧学巧记

转载请保留原文地址http://blog.csdn.net/guodongxiaren/article/details/43876207 概述 System V("系统五")系统上发明了三种IPC机制(消息队列.信号量和共享内存),通常称为System V IPC.又因为后来被收录到Unix的XSI标准之中故又称为XSI IPC.所以当你看到System V IPC 和 XSI IPC的时候实际上指的是同一种东西. C语言是一门面向过程的语言,与OO(面向对象)语言不同,它没有做到数据

巧学DBhelper

这几天在教我很重要的人学习,她属于那种超级小白,很超级的那种. 教她的过程中 发现有的知识点 不管这么教都不会.DBhelper就是不知道怎么记. 当时我就想到 杰哥(程杰)的出的大话系列,和他写书的一些思想. 我也学着试了一下 1 private:私有的 表示 只能在本类中访问的,想想什么是类. 2 3 public:公有的 表示在同一个命名空间下才能使用的,想想什么是命名空间 4 5 static:静态的 表示只要在同一个命名空间下被static 不用实例化类 就可以通过 类.属性 或 类.

巧学教育公益速记课第十期第一组作业2016年3月31号

一号:刘健凤 总学时52分钟 1.数字编码1-10制作完 2.完成36计1-5 表扬自己:坚持早起晨读和运动,不但拥有一个健康的体魄,同时拥有一个高大的灵魂!表扬别人:我们住院部主任做事雷厉风行,但是对病人如沐春风,对病人像家人一样,凡事从病人角度出发,是真正的医者仁心!我要多跟主任学习专业知识和做为医者父母心的高尚情操 3.学习后的感受:发现速记采用图像后,真的很快.以后学习可以节省好多时间了.自己不足之处是绘画技巧不足,相信以后多加练习会越来越好的,能跟大家一起学习很开心,感恩! 二号蒋文静

总会有一个是你需要的

http://www.shouce.ren/post/d/id/112300 黑客攻防实战入门与提高.pdfhttp://www.shouce.ren/post/d/id/112299 黑客入门新手特训.pdfhttp://www.shouce.ren/post/d/id/112298 黑客与设计-剖析设计之美的秘密(彩印).pdfhttp://www.shouce.ren/post/d/id/112297 鸟哥的LINUX私房菜:服务器架设篇 (第二版).pdfhttp://www.shouc

JavaScript - 收藏集 - 掘金

Angular 中的响应式编程 -- 浅淡 Rx 的流式思维 - 掘金第一节:初识Angular-CLI第二节:登录组件的构建第三节:建立一个待办事项应用第四节:进化!模块化你的应用第五节:多用户版本的待办事项应用第六节:使用第三方样式库及模块优化用第七节:给组件带来活力Rx--隐藏在 Angular 中的利剑Redux你的 A... Electron 深度实践总结 - 前端 - 掘金思维导图 前言: Electron 从最初发布到现在已经维护很长一段时间了,但是去年才开始慢慢升温.笔者个人恰好

CentOS6.6下执行快捷命令

巧学巧用快捷命令 1.!$    上一条命令的最后一条参数,不用重复输入长参数 例如: [[email protected]~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=00:0C:29:AA:77:84 TYPE=Ethernet UUID=7260d0db-35da-43f2-a0bd-c2d4edc24db2 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none I

我这种人都学得了编程,你呢?

我这种人都学得了编程,你呢? 声明,我也是在学习中,如果看得起可以跟我一起学习! 先自我介绍一下吧,给没信心的朋友找找信心! 今天是2014年5月7日,正在上初三,还有一个月的时间就初中毕业了. 很多人都认为自己学历不够,英语不好想学但是又不敢学.很多人都认为我很聪明,学习很棒. 其实不是,我都不好意思说我这次月考,考了全级800多名,全级才850多人.初中三年我大概睡了一年的觉,我这种人都能学了编程你呢?? 如果你真的对编程有兴趣就开始学吧,很多教程里都说兴趣是最好的老师,我感觉这句话一点都没

网工加油

一个听起来好屌的名字:网络攻城狮 是时候考个证书了,都要快期末考试了.快到大四了,去实习的时候找不出一张证书来,都羞愧得要死.而且在寝室,有人天天喊着自己有了普通话证,教师资格证,会计从业资格证.不仅如此,还正在考驾驶证呢!听起来好牛,反正有人可能蹦逼嘛. 以前我也是对计算机考证是不屑的,尤其是一个计算机专业的童鞋居然去考了什么会计从业资格证,什么普通话证书云云.这还不要紧,要命的是过了这些证书居然天天蹦逼,真不知道他们是怎么想的,或许他们从头到尾根本就没有进入过计算机,或者编程吧.那么进大学校