`

ImageSource的使用心得

    博客分类:
  • WPF
阅读更多

很多时候,我们会使用图片来装饰UI,比如作为控件背景等。

而这些图片可以分为两种形式,即存在于本地文件系统中的图片和存在于内存中的图片

对于这两种形式的图片,在WPF中,使用方法不同,下面主要说明针对这两种形式图片的使用方法

一、存在于本地文件系统中的图片文件

对于此类图片,使用非常简单,在xaml中直接指定路径即可,如:

1WPF中的imagesource - 渺儿 - miaoerjyzhu的博客<Button>

2WPF中的imagesource - 渺儿 - miaoerjyzhu的博客    <Button.Background>

3WPF中的imagesource - 渺儿 - miaoerjyzhu的博客        <ImageBrush ImageSource="bg.jpg"/>

4WPF中的imagesource - 渺儿 - miaoerjyzhu的博客    </Button.Background>

5WPF中的imagesource - 渺儿 - miaoerjyzhu的博客</Button>

对应的的C#代码为

1WPF中的imagesource - 渺儿 - miaoerjyzhu的博客ImageBrush imageBrush = new ImageBrush();

2WPF中的imagesource - 渺儿 - miaoerjyzhu的博客imageBrush.ImageSource = new BitmapImage(new Uri("bg.jpg", UriKind.Relative));

3WPF中的imagesource - 渺儿 - miaoerjyzhu的博客button.Background = imageBrush;

其中imageBrush.ImageSource的类型为ImageSource,而ImageSource是个抽象类,

因此我们不能直接使用它,而是使用它的子类来代替,查阅MSDN,可以看到它们的继承关系:

System.Windows.Media.ImageSource

   System.Windows.Media.DrawingImage 

      System.Windows.Media.Imaging.BitmapSource

二、存在于内存中的图片

 对于只存在于内存中的图片,用以上方法就显得无能为力了,我们应该另寻他法,下面介绍一种方法:

先看代码:

1WPF中的imagesource - 渺儿 - miaoerjyzhu的博客//此处图片从文件中读入用以模拟内存中的图片

2WPF中的imagesource - 渺儿 - miaoerjyzhu的博客System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap("bg.jpg");

3WPF中的imagesource - 渺儿 - miaoerjyzhu的博客MemoryStream stream = new MemoryStream();

4WPF中的imagesource - 渺儿 - miaoerjyzhu的博客bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);

5WPF中的imagesource - 渺儿 - miaoerjyzhu的博客ImageBrush imageBrush = new ImageBrush();

6WPF中的imagesource - 渺儿 - miaoerjyzhu的博客ImageSourceConverter imageSourceConverter = new ImageSourceConverter();

7WPF中的imagesource - 渺儿 - miaoerjyzhu的博客

8WPF中的imagesource - 渺儿 - miaoerjyzhu的博客imageBrush.ImageSource = (ImageSource)imageSourceConverter.ConvertFrom(stream);

9WPF中的imagesource - 渺儿 - miaoerjyzhu的博客button.Background = imageBrush;

其中bitmap即是存在于内存中的Bitmap类型图片,此处使用直接加载本地图片文件模拟。

步骤是先将它保存到流中,再使用ImageSourceConverter 类的ConvertFrom方法从流中得到我们需要的图片

OK,本文到此结束,以上方法都是自己在使用中探索所得,如果有更好的方法,本人非常愿意和各位交流。

分享到:
评论

相关推荐

    Image Shadow UserControl for ASP.NET 2.0

    使用"Image Shadow UserControl"非常简单。首先,需要将控件添加到ASP.NET项目的工具箱中,然后在网页设计视图中拖放该控件到适当位置。接着,设置控件的属性,如阴影的颜色、透明度、角度、距离等。最后,将要添加...

    ARCMAP 操作心得

    ArcMap 可以将多种数据类型作为数据层进行加载,诸如 AutoCAD 矢量数据 DWG,ArcGIS 的 矢量数据 Coverage、GeoDatabase、TIN 和栅格数据 GRID,ArcView 的矢量数据 ShapeFile,ERDAS 的栅格数据 ImageFile,USDS 的...

    Miller-Brand Guidelines_大厂VI品牌视觉标准_外企业品牌手册.pdf

    - 摄影设备和产品形象的规范,特别是ArcArmor®产品,以及The Miller图像站点Image Source的使用。 15. 标识: - 外部标志、分销商标志和贴纸,以及运输车辆的标识设计。 16. 产品命名: - Miller产品命名流程...

    C#仿迅雷看看皮肤界面源码

    在WPF中,我们可以利用BitmapImage或ImageSource对象来加载和显示皮肤图片。皮肤的切换可能通过更换资源文件或者动态改变控件的样式来实现。 此外,`.sln`文件是Visual Studio的解决方案文件,包含了项目及其依赖...

    R语言学习笔记

    数据保存方面,可以使用save.image()函数保存工作空间,或者使用source()函数执行已经编写好的R程序。 R语言还提供了丰富的函数来进行数学计算和统计分析。比如,sum()函数用于求和,prod()函数用于求积,median()...

    使用 OSINT 调查校园枪击案.pdf

    OSINT(Open-Source Intelligence)是从公开来源收集的信息,包括社交媒体、论坛、博客、新闻报道、学术文章等。在网络安全领域,OSINT可以用于威胁情报、风险评估以及像校园枪击案调查这样的特定事件分析。 1. ...

    vxworks kernel内核开发文档

    - **VxWorks Image Projects (VIP)**:VIP 是一种特殊的项目类型,用于创建包含操作系统内核和服务的完整系统镜像。 **4.3 设备驱动选择** 在配置过程中,需要根据实际硬件设备选择相应的驱动程序。这一步骤非常...

    openlayer3例子源码

    6. **openLayer3地图的使用心得**: 这可能是一个包含作者使用OpenLayers 3的经验分享的文档,可能涵盖性能优化、自定义控制、图层管理和事件处理等方面的知识。 7. **示例源码**: 压缩包中的“openlayer3例子...

    OpenLayers参考

    2. **图层管理**:学习如何添加不同的图层类型,如瓦片图层(Tile Layer)、瓦片源(Tile Source)、图像图层(Image Layer)和矢量图层(Vector Layer)。掌握图层的可见性、透明度、叠加顺序等属性的调整方法。 3...

    Android 3D滑动菜单完全解析 Android实现推拉门式的立体特效

    在Android开发中,3D滑动菜单是一种提升用户体验和视觉效果的设计手法,它通过立体的推拉门式动画,使得用户在操作应用时感受到更为生动的交互体验。本篇文章将详细解析如何在Android中实现这样的特效。 首先,我们...

    JavaScript期末大作业:基于HTML+CSS+JavaScript黑色的bootstrap响应式企业博客介绍模板

    - **社区交流**:加入相关技术社区,如Stack Overflow、Reddit等,与其他开发者交流经验心得。 总之,这个项目不仅涵盖了HTML5、CSS3和JavaScript的基础知识,还涉及到了多媒体集成、响应式设计等多个进阶技能,...

    HTML5常用方法

    &lt;blockquote cite="http://www.example.com/source"&gt; 这是一段引用的文字。 ``` #### 四、Figure标签 - **用途**:定义媒体内容,如图片、图表、代码片段等。 - **子标签**: - **Img**:定义图像,必须包含...

    mouse-maze-开源

    最后,"disk image" 文件则是一个虚拟磁盘映像,用于在模拟器或真实的 Apple II 硬件上运行程序,它保存了所有必要的执行文件和配置信息。 开源软件的发展推动了技术的共享和进步,"mouse-maze" 项目就是其中的一个...

    2013高考英语单词联想记忆(九)

    可以与ask for,require替换使用,表示请求或需要某物。 7. **case**:事例,案例。可以与base(基础)和vase(花瓶)进行联想,以记住其形状和含义。 8. **clone**:无性繁殖,克隆。谐音记忆法可以帮助记住这个...

Global site tag (gtag.js) - Google Analytics