深入WPF中的图像画刷(ImageBrush)之1——ImageBrush使用举例
2010年06月11日 星期五 15:20

昨天我在《简述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?

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/johnsuna/archive/2007/09/05/1772912.aspx

转载于:https://www.cnblogs.com/songtzu/archive/2012/04/09/2439468.html

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

  1. WPF中的渐变画刷的一些案例

    WPF的渐变画刷,这些画刷改变不同DrawingBrush对象的几何图形,创建渐变为不同形状的平铺模式. 下面是来自一个国外的一些渐变画刷案例: 案例1:定义一个简单的直线,这个几何图形是基于Draw ...

  2. WPF图形之纯色画刷和渐变画刷的使用

    背景介绍   在WPF中,画刷的使用无处不在,可以说画刷是整个WPF体系里不可或缺的一部分,在画刷中,从渲染效果的特征来看,可以分为纯色画刷.线性渐变画刷.径向渐变画刷.每一种画刷都有其适用的场景,下 ...

  3. GDI+ 中路径渐变画刷的使用

    背景 路径是一系列相互连接的直线和曲线,由许多不同类型的点所构成,用于表示复杂的不规则图形, GraphicsPath 类表示. 路径渐变画刷允许设置颜色从中心向边界渐变的画刷,可以设置中心点颜色和边 ...

  4. wpf 带图像的文本框_注意WPF中带有图像PNG的DPI-图像比例奇怪或模糊

    wpf 带图像的文本框 Is that enough TLAs (Three Letter Acronyms) in the title there? I continue to mentally d ...

  5. 入门知识(二)WPF所有的画刷工具

    转自https://www.cnblogs.com/huangxincheng/archive/2012/07/14/2591941.html 这一篇我们聊聊wpf中的画刷,在wpf中如果想玩各种花哨 ...

  6. WPF基础笔记(5)画刷

    WPF有5种画刷和1种自定义画刷,都是继承自基类Brush.基类如下 透明度    绝对转换     相对转换 以下主要讨论TileBrush 1. Image画刷 <Grid.Backgrou ...

  7. CSharp代码示例每日一讲: 在GDI+中使用画笔和画刷

    CSharp代码示例每日一讲,为刚刚学习编程的人准备,利用最简单的代码介绍CSharp编程知识! 画笔和画刷是图形应用中最常用的两种对象.笔用于绘制图形对象的轮廓,如线条和曲线;刷子是用来填充图形对象 ...

  8. WPF中的形状Shape与几何图形Geometry详解

    总目录 文章目录 总目录 一.Shape(形状) 1.Shape基本信息 2.Ellipse 1.案例 2.说明 3.Rectangle 1.案例 2.说明 4.Line 1.案例 2.说明 5.Po ...

  9. Windows 8 应用商店应用开发 之 画刷

    8.5画刷 画刷用来对图形.文本和控件的内部或轮廓进行上色,经过上色可以让控件在界面中可见并能增加美观性.这一节重点介绍单色画刷(SolidColorBrush).线性渐变色画刷(LinearGrad ...

最新文章

  1. jad 反编译java
  2. Android使用Glide加载Gif.解决Glide加载Gif非常慢问题
  3. ASP.NET Core的身份认证框架IdentityServer4(3)-术语的解释
  4. 前端学习(1978)vue之电商管理系统电商系统之为每一行数据提供单独的value
  5. Knative 实战:基于阿里云 Kafka 实现消息推送
  6. ansible读不到java_home_ansible执行带有环境变量的脚本不生效
  7. 考研南邮和杨大计算机,江苏省这4所“非211”低调有实力,从不争名次,毕业生颇受欢迎...
  8. SplitContainer控件扩展之收缩面板
  9. DelayQueue 分析
  10. 模电--反馈电路的综合判断
  11. 移动支付这回真的逆天了!什么才是真正的资本运作?让微信春晚来告诉你!...
  12. 又逛《云风工作室》小记
  13. ValueError: attempt to get argmax of an empty sequence
  14. Android入门教程 Android开发环境搭建【详细教程】
  15. 《MySQL DBA:SSL连接》
  16. 如何把灰色的图片背景换成白底图?
  17. if then 条件判断语句和 if then else
  18. ORY Hydra项目详解
  19. 修改element-UI 的 el-upload样式
  20. react 生命周期详解

热门文章

  1. 50 个 Java 性能优化细节,你要不要看?
  2. 当git上只做文件大小写重命名的修改时,如何躲坑...
  3. 全面学习Prometheus
  4. OSI模型中的数据链路层和物理层的区分
  5. $(function() {})是干什么的及作用
  6. Android --- Gradle是什么?
  7. centos7配置 console口_玩转KVM-一招打开vm的console口
  8. 运维分级发布_华为杨超斌发布面向“1+N”目标网的5G全系列解决方案
  9. 数据中心碳中和白皮书
  10. 专业人士提升数据中心职业生涯的6件事