深入WPF中的图像画刷(ImageBrush)之1——ImageBrush使用举例
原文:深入WPF中的图像画刷(ImageBrush)之1——ImageBrush使用举例
昨天我在《简述WPF中的画刷(Brush) 》中简要介绍了WPF中的画刷的使用。现在接着深入研究一下其中的ImageBrush。
如上文所述,ImageBrush是一种TileBrush,它使用ImageSource属性来定义图像作为画刷的绘制内容。你可以控制图像的缩放、对齐、铺设方式。ImageBrush可用于绘制形状、控件,文本等。
下面看看它的一些简单应用:
首先看一下效果图片:
先看看上图的左边部分:
图1为原始图片,图2是将原始图片作为Border的绘制画刷的效果,图3是将图片应用于TextBlock的效果(为了演示,我增加了BitmapEffect效果)。
看看图2的XAML代码:
<Border BorderThickness="20,40,5,15" x:Name="borderWithImageBrush" Margin="11.331,178.215,157.086,117.315">
<Border.BorderBrush>
<ImageBrush ImageSource="summer.jpg" Viewport="0,0,1,1" />
</Border.BorderBrush>
<DockPanel>
<TextBlock DockPanel.Dock="Top" TextWrapping="Wrap" Margin="10">
<Run Text="使用ImageBrush绘制的边框"/>
</TextBlock>
</DockPanel>
</Border>
(C#代码略)
再看看图3的XAML代码:
<TextBlock FontWeight="Bold" FontSize="56pt" FontFamily="Arial"
Text="BrawDraw" x:Name="wordsWithImageBrush" Height="88.214" Margin="11.331,0,143.972,7.996" VerticalAlignment="Bottom">
<TextBlock.Foreground>
<ImageBrush ImageSource="Summer.jpg" />
</TextBlock.Foreground>
<TextBlock.BitmapEffect>
<OuterGlowBitmapEffect GlowColor="Black" GlowSize="8" Noise="0" Opacity="0.6" />
</TextBlock.BitmapEffect>
</TextBlock>
浅蓝色底部分为关键代码,黄色底部分为增加的外发光特效(也就是Photoshop中常说的“辉光效果”)。
关键部分的C#代码为:
TextBlock wordsWithImageBrush = new TextBlock();
// ...(其他定义wordsWithImageBrush属性的代码)
ImageBrush berriesBrush = new ImageBrush();
berriesBrush.ImageSource =
new BitmapImage(
new Uri(@"Summer.jpg", UriKind.Relative)
);
wordsWithImageBrush.Foreground = berriesBrush;
OuterGlowBitmapEffect glowEffect = new OuterGlowBitmapEffect();
glowEffect.GlowSize = 8;
glowEffect.GlowColor = Color.Black;
glowEffect.Noise = 0;
glowEffect.Opacity = 0.6;
wordsWithImageBrush.BitmapEffect = glowEffect;
再看看右边部分:
图4是使用了ImageBrush填充Ellipse的效果,这里使用了我的一个美女好友的图片
。(相关代码见下)
图4的XAML代码:
<Ellipse x:Name="ellipseWithImageBrush" Stroke="#FF000000" Height="150" Width="150">
<Ellipse.Fill>
<ImageBrush ImageSource="xian.png"/>
</Ellipse.Fill>
</Ellipse>
关键的C#代码:
ImageBrush imgBrush = new ImageBrush();
imgBrush.ImageSource =
new BitmapImage(
new Uri(@"xian.png", UriKind.Relative)
);
ellipseWithImageBrush.Fill = imgBrush;
图5使用了ImageBrush的铺设方式属性之后的效果。(具体代码见下一篇文章《深入WPF中的图像画刷(ImageBrush)之2——ImageBrush的铺设方式》)
图6与图3类似,不同的是使用了DropShadowBitmapEffect,同时还对文字大小进行了变形处理(垂直高度加高至128%)。
图6的XAML代码:
<TextBlock FontWeight="Bold" FontSize="56pt" TextWrapping="Wrap" FontFamily="Arial Black"
Text="Girl" x:Name="wordsWithGirlImageBrush" RenderTransformOrigin="0.5,0.5" Height="97.468" Margin="0,0,2.086,2.144" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="153.697">
<TextBlock.Foreground>
<ImageBrush ImageSource="xian.png" />
</TextBlock.Foreground>
<TextBlock.BitmapEffect>
<DropShadowBitmapEffect Color="Black" Direction="315" ShadowDepth="4" Softness="0.5"
Opacity="1.0"/>
</TextBlock.BitmapEffect>
<TextBlock.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1.28"/>
</TransformGroup>
</TextBlock.RenderTransform>
</TextBlock>
(C#代码略)
从上面例子中,我们可以思考一下,以前如果要在GDI+中实现文字的辉光效果、阴影效果,是不是需要写非常多的C#代码?现在,WPF已经不再麻烦,几句代码搞定!你是不是想将它们保存为图片?如是,读读我以前写的这篇BLOG吧:WPF中,如何使用图像API进行绘制而不是XAML? 。
相关文章:
深入WPF中的图像画刷(ImageBrush)之1——ImageBrush使用举例 〔本篇〕
深入WPF中的图像画刷(ImageBrush)之2——ImageBrush的铺设方式
简述WPF中的画刷(Brush)
深入WPF中的图像画刷(ImageBrush)之1——ImageBrush使用举例的更多相关文章
- 深入WPF中的图像画刷(ImageBrush)之2——ImageBrush的铺设方式
原文:深入WPF中的图像画刷(ImageBrush)之2--ImageBrush的铺设方式 ------------------------------------------------------ ...
- 简述WPF中的图像像素格式(PixelFormats)
原文:简述WPF中的图像像素格式(PixelFormats) --------------------------------------------------------------------- ...
- (C#)WPF:LinearGradientBrush 线性渐变画刷和RadialGradientBrush 圆形渐变画刷
<Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/200 ...
- 简述WPF中的画刷(Brush)
原文:简述WPF中的画刷(Brush) -------------------------------------------------------------------------------- ...
- WPF 10天修炼 第八天 - 形状、画刷和变换
图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System. ...
- 【WPF学习】第四十章 画刷
画刷填充区域,不管是元素的背景色.前景色以及边框,还是形状的内部填充和笔画(Stroke).最简单的画刷类型是SolidColorBrush,这种画刷填充一种固定.连续的颜色.在XAML中设置形状的S ...
- WPF设计の画刷(Brush)
一.什么是画刷 画刷是是一种渲染方式,用于填充图形形状,如矩形.椭圆.扇形.多边形和封闭路径.在GDI+中,画刷分为以下几种:SolidBrush,TextureBrush,HatchBrush,Li ...
- Sliverlight之 画刷
1,5种画刷 (见Project15) (1)TextBlock控件中的Forground和BackGround属性是一个什么对象?它在前台的完整的写法是什么?(实际是.net做了一个转换,可以直接写 ...
- WPF中Brush类型
画刷Brush使用 画刷类 SolidColorBrush LinearGradientBrush RadialGradientBrush ImageBrush VisualBrush Drawing ...
随机推荐
- javascrit开发的基本代码结构的
今天看到群里一个demo,简单看了一下. 然后自己就写了一个通用的javascrit开发的基本代码结构的js文件. 代码例如以下: (function($,win){ //定义全局变量对象 var o ...
- java I/O库的设计模式
在java语言 I/O库的设计中,使用了两个结构模式,即装饰模式和适配器模式. 在任何一种计算机语言中,输入/输出都是一个很重要的部分.与一般的计算机语言相比,java将输入/输出的功能和使 ...
- linux跟踪线程的方法:LWP和strace命令
摘要:在使用多线程程序时,有时会遇到程序功能异常的情况,而这种异常情况并不是每次都发生,很难模拟出来.这时就需要运用在程序运行时跟踪线程的手段,而linux系统的LWP和strace命令正是这种技术手 ...
- 【77.78%】【codeforces 625C】K-special Tables
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- win7
http://www.xitongiso.com/?pot http://www.potplayer.org/
- ios开发事件处理之:五:事件的响应
- jquery-7 jquery中的文档处理方法有哪些(方法的参数表示功能增强)
jquery-7 jquery中的文档处理方法有哪些(方法的参数表示功能增强) 一.总结 一句话总结:多看参考文档,多看主干目录.一般的功能分两个方法来实现,一个对应标签,一个对应标签和事情,比如克隆 ...
- 【iOS】自己定义TabBarController
一.自己定义的思路 iOS中的TabBarController确实已经非常强大了.大部分主流iOS应用都会採用. 可是往往也不能满足所有的需求,因此须要自己定义TabBar,自己定义须要对系统的Tab ...
- android studio 2.2 使用cmake编译NDK
Android studio 2.2 已经进入beta版本,新功能添加众多,NDK编程也得到了简化.官方博客介绍.本文介绍如何使用新版android studio调用 c++代码,为了超级通俗易懂,例 ...
- phpStorm怎么解决502 bad gateway(总结整理)
phpStorm怎么解决502 bad gateway(总结整理) 一.总结 1.配置 php解释器. 二.phpStorm解释器与服务器配置(解决502 bad gateway与404 not fo ...