使用Graphics绘制字体阴影代码

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Windows.Forms;

namespace Guying.Project.DrawFontShadow
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics graphics = e.Graphics;
            graphics.Clear(Color.White);
            //对文本使用去锯齿的边缘处理
            FontFamily fontFamily = new FontFamily("宋体");
            Font font = new Font(fontFamily, 100, FontStyle.Bold, GraphicsUnit.Pixel);
            //文本输出框
            RectangleF textout = new RectangleF(font.Height, this.ClientSize.Height / 2, this.ClientSize.Width, this.ClientSize.Height);
            //在两个不同的位置绘制文本,形成阴影
            //solidBrush的色彩透明度为100,暗黑
            SolidBrush solidBrush = new SolidBrush(Color.FromArgb(100, Color.Black));
            SolidBrush redBrush = new SolidBrush(Color.Blue);
            graphics.DrawString("孤影", font, solidBrush,
                new PointF(27.0f, 27.0f));
            graphics.DrawString("孤影", font, redBrush,
                new PointF(12.0f, 20.0f));
            //另一种阴影字,阴影为线条
            //构造影线画刷
            HatchBrush brush_tmp = new HatchBrush(
                HatchStyle.DarkDownwardDiagonal, Color.Black, Color.White);
            int reptime = 40;
            //先画背景
            for (int i = 0; i < reptime; i++)
                graphics.DrawString("您好", font, brush_tmp,
                    new PointF(textout.X + i + 2, textout.Y + i + 2));
            //再画前景
            graphics.DrawString("您好", font, Brushes.Blue, new PointF(textout.X, textout.Y));
        }
}

 



使用Graphics绘制字体阴影

转载于:https://www.cnblogs.com/GeDiao/p/4064121.html

要让文字发光,可以使用 Java Graphics2D 的阴影效果来实现。以下是一个示例代码: ```java import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.font.TextLayout; import java.awt.geom.Rectangle2D; import javax.swing.JFrame; import javax.swing.JPanel; public class TextGlowExample extends JPanel { private static final long serialVersionUID = 1L; private String text = "Hello, World!"; private Font font = new Font("Arial", Font.BOLD, 50); private Color color = Color.YELLOW; private int glowSize = 10; public TextGlowExample() { setPreferredSize(getPreferredSize()); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; // 设置字体和颜色 g2d.setFont(font); g2d.setColor(color); // 计算文字的大小和位置 TextLayout textLayout = new TextLayout(text, font, g2d.getFontRenderContext()); Rectangle2D bounds = textLayout.getBounds(); int x = getWidth() / 2 - (int) bounds.getWidth() / 2; int y = getHeight() / 2 + (int) bounds.getHeight() / 2; // 开启抗锯齿和阴影效果 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); // 绘制文字阴影 g2d.setColor(Color.WHITE); for (int i = 0; i < glowSize; i++) { g2d.setStroke(new java.awt.BasicStroke((float) (glowSize - i))); textLayout.draw(g2d, x, y + i); } // 绘制文字 g2d.setColor(color); g2d.setStroke(new java.awt.BasicStroke(1f)); textLayout.draw(g2d, x, y); } @Override public java.awt.Dimension getPreferredSize() { return new java.awt.Dimension(300, 200); } public static void main(String[] args) { JFrame frame = new JFrame("Text Glow Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new TextGlowExample()); frame.pack(); frame.setVisible(true); } } ``` 在上面的代码中,我们使用了 `TextLayout` 类来计算文字的大小和位置,并使用了 `RenderingHints` 来开启抗锯齿和阴影效果。在绘制文字时,我们首先绘制文字阴影,然后再绘制文字本身,从而实现了发光的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值