深入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)

原文地址:https://www.cnblogs.com/lonelyxmas/p/9849717.html

时间: 2024-11-06 12:47:54

深入WPF中的图像画刷(ImageBrush)之1——ImageBrush使用举例的相关文章

Wpf 画刷

画刷类 1.SolidColorBrush 使用单一的连续颜色绘制区域. 2.LinearGradientBrush 使用简便填充绘制区域,渐变的阴影填充从一种颜色变化到另一种颜色. 3.RadialGradientBrush 使用径向简便填充绘制区域,除了是在圆形模式中从中心点向外部辐射渐变之外,这种画刷和线性检变化刷类似. 4.ImageBrush 使用可以被拉伸.缩放或平铺的图像绘制区域. 5.DrawingBrush 使用一个Drawing对象绘制区域.该对象可以包含已经定义的形状和位图

WPF 10天修炼 第八天 - 形状、画刷和变换

图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System.Windows.Shapes.Shape类是一个抽象类,从该类又派生出多个不同的子类,如下图: Shape类的通用属性 属性名称 描述 Fill 绘制填充的画刷 Stroke 绘制边框的画刷 StrokeThickness 与设备无关的边框宽度 StrokeStartLineCap和StrokeEn

WPF设计の画刷(Brush)

原文:WPF设计の画刷(Brush) 一.什么是画刷 画刷是是一种渲染方式,用于填充图形形状,如矩形.椭圆.扇形.多边形和封闭路径.在GDI+中,画刷分为以下几种:SolidBrush,TextureBrush,HatchBrush,LinearGradientBrush和PathGradientBrush.在层次关系上,它们都位于System.Drawing空间下,继承自System.Drawing.Brush类. 画刷主要分为三大类: 1.SolidBrush(实心画刷)我们最常用 实心画刷

silverlight五种画刷

1.SolidColorBrush(纯色画刷): 2.LinearGradientBrush(线性渐变画刷): 3.RedialGradientBrush(径向渐变画刷): 4.ImageBrush(图像画刷): 5.VideoBrush(视频画刷): silverlight五种画刷,布布扣,bubuko.com

wpf 画刷的分类

System.Windows.Media.Brush最上一层画刷 System.Windows.Media.GradientBrush  线性画刷 ,下层主要有两种画刷 System.Windows.Media.LinearGradientBrush  线性渐变 System.Windows.Media.RadialGradientBrush焦点定义渐变的开变 System.Windows.Media.BitmapCacheBrush  使用缓存的内容绘制区域 System.Windows.Me

WPF样式之画刷结合样式

第一种画刷,渐变画刷GradientBrush (拿线性渐变画刷LinearGradientBrush(其实它涵盖在GradientBrush画刷内.现在拿他来说事.),还有一个圆心渐变画刷RadialgradientBrush,两者用法相同): 我想象中的button的总体样式大体结构应该如下: <Style TargetType="Button"> <Setter Property="Template"> <Setter.Value

WPF学习系列之八(形状,画刷和变换)

形状,画刷和变换   概述: 在许多用户界面技术中,普通控件和自定义绘图之间具有清晰的区别.通常来说,绘图特性只用于特定的应用程序--如游戏,数据可视化和物理仿真等.而WPF具有一个非常不同的原则.它以相同的方式处理控件和绘制的图形. 一.理解形状.       在WPF用户界面中,绘制2D图形内容的最简单方法是使用形状(shape) :专门用于表示简单的直线,椭圆,矩形以及多边形的类.从技术角度讲,形状就是所谓的绘图图元.可以组合这些基本元素来创建更复杂的图形.形状最重要的细节是,它们都继承自

(转载)VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)

上一节中鸡啄米主要讲的是画笔CPen的用法,前面也说了,GDI对象中最常用的就是画笔和画刷,本节就讲讲画刷CBrush. 鸡啄米依然是通过实例的方式来说明画刷的用法.此实例要实现的功能是,对话框上有一个按钮控件和一个图片控件,点击按钮弹出颜色对话框,然后在颜色对话框中选择颜色并点击"确定"后,图片控件中将显示选择的颜色. 其实此实例的功能,还可以通过重载对话框WM_CTLCOLOR消息的响应函数等方法来实现,但为讲解画刷的CBrush的使用,鸡啄米采用了下面代码中的方法. 以下是此实例

WPF中画虚线

原文:WPF中画虚线 在WPF中,画线的方法十分简单,只要声明一个Line然后添加到指定的位置就可以了,但Line并不仅仅只能画一条直线,还可以对直线进行修饰. 1.Line.StrokeDashArray属性 StrokeDashArray是一个双精度字符串,指示用于勾勒形状轮廓的虚线和间距的样式. 2.Line.StrokeDashCap属性 获取或设置一个 PenLineCap 枚举值,该值指定如何绘制虚线的两端. 3.Line.StrokeEndLineCap和Line.StrokeSt