原文:深入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使用举例的更多相关文章

  1. 深入WPF中的图像画刷(ImageBrush)之2——ImageBrush的铺设方式

    原文:深入WPF中的图像画刷(ImageBrush)之2--ImageBrush的铺设方式 ------------------------------------------------------ ...

  2. 简述WPF中的图像像素格式(PixelFormats)

    原文:简述WPF中的图像像素格式(PixelFormats) --------------------------------------------------------------------- ...

  3. (C#)WPF:LinearGradientBrush 线性渐变画刷和RadialGradientBrush 圆形渐变画刷

    <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/200 ...

  4. 简述WPF中的画刷(Brush)

    原文:简述WPF中的画刷(Brush) -------------------------------------------------------------------------------- ...

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

    图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System. ...

  6. 【WPF学习】第四十章 画刷

    画刷填充区域,不管是元素的背景色.前景色以及边框,还是形状的内部填充和笔画(Stroke).最简单的画刷类型是SolidColorBrush,这种画刷填充一种固定.连续的颜色.在XAML中设置形状的S ...

  7. WPF设计の画刷(Brush)

    一.什么是画刷 画刷是是一种渲染方式,用于填充图形形状,如矩形.椭圆.扇形.多边形和封闭路径.在GDI+中,画刷分为以下几种:SolidBrush,TextureBrush,HatchBrush,Li ...

  8. Sliverlight之 画刷

    1,5种画刷 (见Project15) (1)TextBlock控件中的Forground和BackGround属性是一个什么对象?它在前台的完整的写法是什么?(实际是.net做了一个转换,可以直接写 ...

  9. WPF中Brush类型

    画刷Brush使用 画刷类 SolidColorBrush LinearGradientBrush RadialGradientBrush ImageBrush VisualBrush Drawing ...

随机推荐

  1. 重新配置vim

    重新配置,并非折腾,发个链接吧留着以后用。 都是前辈 vimer程序员的世界 Vim(gvim)配色方案推荐 gvim(vim)使用微软雅黑中文字体 Vim(gvim)编程字体推荐 所需即所获:像 I ...

  2. 13、虚拟驱动vivi.c注册过程分析及怎么写V4L2驱动及启动过程

    UVC设备也是一个usb设备,在uvc_driver.c中的init函数会调用usb_register注册,根据id_table发送可支持的设备后调用probe函数,其会去uvc_register_c ...

  3. win32程序如何改变字体大小颜色

    //设定文字大小和颜色 LOGFONT logfont; //改变输出字体 ZeroMemory(&logfont, sizeof(LOGFONT)); logfont.lfCharSet = ...

  4. angular项目中各个文件的作用

    原文地址 https://www.jianshu.com/p/176ea79a7101 大纲 1.对angular项目中的一些文件的概述 2.对其中一些文件的详细描述 2.1.package.json ...

  5. JAVA: Socket和ServerSocket网络编程

    面是本次学习的笔记.主要分异常类型.交互原理.Socket.ServerSocket.多线程这几个方面阐述. 异常类型 在了解Socket的内容之前,先要了解一下涉及到的一些异常类型.以下四种类型都是 ...

  6. golang 操作 Redis & Mysql & RabbitMQ

    golang 操作 Redis & Mysql & RabbitMQ Reids 安装导入 go get github.com/garyburd/redigo/redis import ...

  7. vs 2013 常用快捷键及常见问题的解决

    1. 代码编辑 关闭当前文档:ctrl + F4 打开光标所在位置的文档:ctrl + G(shift + g) 返回上次编辑的位置:ctrl + -(键盘数字键 0 后的那个按键) 移动光标所在的行 ...

  8. 【74.89%】【codeforces 551A】GukiZ and Contest

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  9. 辛星浅析yaf框架中的类的自己主动载入问题

    因为公司非常多项目都是基于yaf的,而非常多刚接触yaf的朋友问的第一个问题就是:yaf的自己主动载入是依照什么规则来的. 鉴于此.于是我特别开了一篇博文来记录一下. 首先在yaf中.models文件 ...

  10. url前面双斜杠、单斜杠、无斜杠、点+单斜杠的总结

    原文:url前面双斜杠.单斜杠.无斜杠.点+单斜杠的总结 本来只是一个绝对url和相对url的简单问题,但实际使用中会碰到一些不常见的,比如双斜杠,经常不用竟然忘了,做一下总结.可以参考一下这篇文章 ...