C#使用Effects给图片增加阴影效果

今天写一个小程序有一个给图片加上阴影的需求,记得WPF的Effect中就有阴影特效,就打算用它了。代码如下:

    using (var imageStreamSource = File.OpenRead(@"r:\4.png"))
    using (Stream fs = File.Create(@"r:\test.png"))
    {
        var decoder = BitmapDecoder.Create(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
        var bitmapFrame = decoder.Frames[0];

        var size = new Size(bitmapFrame.PixelWidth, bitmapFrame.PixelHeight);
        var img = new Image() { Source = bitmapFrame };
        img.Effect = new System.Windows.Media.Effects.DropShadowEffect();
        img.Arrange(new Rect(0,0,bitmapFrame.PixelWidth,bitmapFrame.PixelHeight));

        var rtb = new RenderTargetBitmap(bitmapFrame.PixelWidth, bitmapFrame.PixelHeight, 96, 96, PixelFormats.Pbgra32);
        rtb.Render(img);
        var png = new PngBitmapEncoder();
        png.Frames.Add(BitmapFrame.Create(rtb));
        png.Save(fs);
    }

使用过程中,发现WPF和GDI的处理方式还是有有些类似的。它的基本使用方式如下:

    Image myImage = new Image();
    FormattedText text = new FormattedText("ABC",
            new CultureInfo("en-us"),
            FlowDirection.LeftToRight,
            new Typeface(this.FontFamily, FontStyles.Normal, FontWeights.Normal, new FontStretch()),
            this.FontSize,
            this.Foreground);

    DrawingVisual drawingVisual = new DrawingVisual();
    DrawingContext drawingContext = drawingVisual.RenderOpen();
    drawingContext.DrawText(text, new Point(2, 2));
    drawingContext.Close();

    RenderTargetBitmap bmp = new RenderTargetBitmap(180, 180, 120, 96, PixelFormats.Pbgra32);
    bmp.Render(drawingVisual);
    myImage.Source = bmp;

主要是如下几步:

  • 在DrawingContext中绘图
  • 通过DrawingVisual将DrawingContext转换为Visual
  • 通过RenderTargetBitmap将Visual转换为BitmapFrame
  • 通过xxxBitmapEncoder将BitmapFrame保存为图像

这些步骤也无需严格遵守,像我最开始的那个例子则是直接生成Visual,然后保存为图像。其实我更喜欢这种方式,因为Visual是可以直接在WPF的界面上显示出来的,方便调试,并且很方便应用WPF中的各种特效。不过要记得调用一下Arrange函数,否则看不到生成结果的。

这里再给个更简单的例子,以供学习。

    Ellipse cir = new Ellipse();
    cir.Height = 50;
    cir.Width = 50;
    cir.Stroke = Brushes.Black;
    cir.StrokeThickness = 1.0;
    cir.Arrange(new Rect(new Size(50, 50)));    //这句不能漏了

    RenderTargetBitmap rtb = new RenderTargetBitmap(200, 200, 96, 96, PixelFormats.Pbgra32);
    rtb.Render(cir);

    PngBitmapEncoder png = new PngBitmapEncoder();
    png.Frames.Add(BitmapFrame.Create(rtb));
    using (Stream fs = File.Create(@"r:\test.png"))
    {
        png.Save(fs);
    }

到此这篇关于C#使用Effects给图片增加阴影效果的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#实现绘制浮雕图片效果实例

    本文采用C#实例讲解了处理图片为浮雕效果的实现方法,这在PS中是一个常见的功能,也是C#中的一个简单的图像处理例子.程序先读取原图,然后依次访问每个像素的RGB值,获取相邻两个像素的R.G.B值,计算与左上角像素的RGB分量之差,将计算后的RGB值回写到位图,最后进行图片的浮雕处理. 主要代码如下: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Sy

  • c# 识别图片格式的方法

    问题窥探 在有些时候,我们拿到了一张图片.这张图片的格式是 JPG 还是 PNG?是 BMP 还是只有一帧的 GIF?虽然在大部分情况下,你确实可以把一张 PNG 格式的图片保存成 JPG,在电脑上也能双击打开看.但如果你要写一些程序来处理图片,那么图片的格式就至关重要了.例如 GIF 里面有帧信息,而JPG 里面却没有,PNG 图片有通道信息,而 JPG 也没有.如果你下载了一张JPG 的图片,却尝试用处理 GIF 的方式去提取帧信息,显然就会导致程序报错. 解决方案 1.通过文件的扩展名来判

  • C#实现自定义打印文字和图片的示例代码

    目录 1.调用打印机设置 2.关联文档 3.绘制内容 C#中打印其实就是自己绘图+调用系统打印函数,于是便有了以下操作 1.调用打印机设置 如果你想在打印前设置打印机属性(或者切换打印机),请务必添加这段代码,否则电脑会直接按照预设的设置进行打印(打印机都没法选) //打印机设置 PrintDialog printDialog = new PrintDialog(); printDialog.Document = ptDoc; printDialog.ShowDialog(); ptDoc就是打

  • 基于C#实现图片滑动验证码的示例代码

    目录 图片准备 合成目标 实现 1.创建项目 2.Nuget添加ImageSharp 3.vscode打开 4.引入图片 5.生成out_bg.jpg 6.生成out_slider.png 全部代码 最后 图片准备 hole.png和slider.png为png是因为图片带有透明度. 合成目标 最终为前端生成两张图片: out_slider.png高度为344与背景图等高. 也可以打开滑动验证Demo页面,F12来观察图片. 实现 本机环境为.net 6.0.300-preview.22204.

  • C#实现无损压缩图片代码示例

    一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的.尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,影响用户体验,所以一般会将图片进行压缩. 代码实现: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Imaging; using Sys

  • C#实现将网址生成二维码图片方法介绍

    二维码是什么 二维码 QR Code,全称为:Quick Response Code,最早用于日本汽车制造业追踪零部件.QR现有40个标准版本,4个微型版本.相比一维码(也就是我们目前还在常用的条码),拥有更高密度的编码,可存储的信息量更大.一维码只能存储字母和数字,二维码可容纳多达1850个大写字母或者2710个数字或者1108个字符或者500多个汉字,比条码存储量多了几十倍.另外,二维码可以把图片.声音.文字.等可以数字化的信息进行编码. 除此之外:二维码比一维码译码错误率要低得多(误码率不

  • C#使用Effects给图片增加阴影效果

    今天写一个小程序有一个给图片加上阴影的需求,记得WPF的Effect中就有阴影特效,就打算用它了.代码如下: using (var imageStreamSource = File.OpenRead(@"r:\4.png")) using (Stream fs = File.Create(@"r:\test.png")) { var decoder = BitmapDecoder.Create(imageStreamSource, BitmapCreateOptio

  • C#在图片增加文字的实现代码

    业务需要动态给图片增加文字(书本的封面图片),修改字体大小.字体.颜色.控制位置 测试代码: string path = @"E:\cover.png"; Bitmap bmp = new Bitmap(path); Graphics g = Graphics.FromImage(bmp); String str = "贤愚经"; Font font = new Font("仿宋_GB2312", 14, FontStyle.Bold);//设置

  • Android实现图片添加阴影效果的2种方法

    给图片添加阴影效果,这是很常见的需求.第一种方法是自定义drawable,使用layer-list定义两个图片,代码如下: show_view.xml: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 阴影图片,android:left

  • Android直播系统平台搭建之图片实现阴影效果的方法小结

    Android直播系统平台搭建, 图片实现阴影效果的若干种方法,下面给大家列举了三种方法,具体代码如下所示: 第一种 使用 layer-list <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!--底层的左边距离上层左边3dp, 底层的顶部,

  • Spring发送邮件如何内嵌图片增加附件

    用到的JAR包: spring.jar mail.jar activation.jar commons-logging.jar log4j-1.2.15.jar 内嵌图片,给定一个CID值即可,增加附件,使用MimeMessageHelper的addAttachment即可 现在一般不会做内嵌图片,因为这样邮件会很大,容易对服务器造成压力,一般做法是使用图片链接 另外,如果要做内嵌或发送图片,你应该使用信用较高的邮箱帐户,否则会报错: 554 DT:SPM 发送的邮件内容包含了未被许可的信息,或

  • iOS实现图片六边形阴影效果

    先来看看效果图 这个效果写起来挺简单,主要运用下面几个知识点 layer 的mask : 图层蒙版 layer 的shadowPath : 绘制自定义形状阴影 UIBezierPath :绘制六边形路线 说完知识点下面上代码了 绘制六边形的路线 -(CGPathRef)getCGPath:(CGFloat)viewWidth{ UIBezierPath * path = [UIBezierPath bezierPath]; path.lineWidth = 2; [[UIColor whiteC

  • 纯CSS实现的当鼠标移上图片添加阴影效果代码

    CSS给图片添加阴影 *{padding:0;margin:0;} body{background:#E8EDF1;padding:20px;} #profileAvatar {overflow:hidden;zoom:1;} #profileAvatar i{float:left;visibility:hidden;background:url(http://files.jb51.net/demoimg/200912/avatar.gif) 0 0 no-repeat;} #profileAv

  • Asp.net简单实现给图片增加文字水印

    经常看见MOP上有人贴那种动态的图片,就是把一个字符串作为参数传给一个动态网页,就会生成一个带有这个字符串的图片,这个叫做文字水印.像什么原来的熊猫系列,还有后来的大树和金条,都挺有意思.就用Asp.net写了一个非常简单的.全部的代码如下: 复制代码 代码如下: <%@ Import Namespace="System" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespa

  • 给图片加阴影效果的CSS

    .pic { position:relative; background:#CCC; margin:10px; } .pic span { display:block; border:1px solid #333; background:#FFF; position:relative; padding: 3px; } .right {/*阴影在右边时*/ top:-4px; left:-4px; } .left {/*阴影在左边时*/ top:-4px; right:-4px; } [Ctrl+

  • 详解Android如何实现阴影效果

    目录 实现形式 elevation CardView属性 shadow属性 layer配置文件 自定义实现 小结 实现形式 elevation Material Design提供了View的阴影效果设置.主要由两个属性决定:elevation和translationZ. Z = elevation + translationZ PS:这种实现方式只有API21以及以上才能支持实现. elevation属性表示View高度加上高度就会有阴影效果. translationZ属性表示给View增加一个

随机推荐