網站首頁 編程語言 正文
解決思路:
(1)描邊效果可以將文本字符串用GDI+生成Bitmap,然后轉成BitmapImage,再用WPF的Image控件顯示。
(2)外發光效果用WPF自帶的Effect實現
代碼:
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.IO; namespace TextHighLighthDemo { public class FancyText { private static System.Windows.Media.Imaging.BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap) { using (MemoryStream stream = new MemoryStream()) { bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png); // 坑點:格式選Bmp時,不帶透明度 stream.Position = 0; System.Windows.Media.Imaging.BitmapImage result = new System.Windows.Media.Imaging.BitmapImage(); result.BeginInit(); result.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad; result.StreamSource = stream; result.EndInit(); result.Freeze(); return result; } } private static Bitmap ImageFromText(string strText, Font fnt, Color clrFore, Color clrBack, int blurAmount = 5) { Bitmap bmpOut = null; int sunNum = 255; //光暈的值 using (Graphics g = Graphics.FromHwnd(IntPtr.Zero)) { SizeF sz = g.MeasureString(strText, fnt); using (Bitmap bmp = new Bitmap((int)sz.Width, (int)sz.Height)) using (Graphics gBmp = Graphics.FromImage(bmp)) using (SolidBrush brBack = new SolidBrush(Color.FromArgb(sunNum, clrBack.R, clrBack.G, clrBack.B))) using (SolidBrush brFore = new SolidBrush(clrFore)) { gBmp.SmoothingMode = SmoothingMode.HighQuality; gBmp.InterpolationMode = InterpolationMode.HighQualityBilinear; gBmp.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; gBmp.DrawString(strText, fnt, brBack, 0, 0); bmpOut = new Bitmap(bmp.Width + blurAmount, bmp.Height + blurAmount); using (Graphics gBmpOut = Graphics.FromImage(bmpOut)) { gBmpOut.SmoothingMode = SmoothingMode.HighQuality; gBmpOut.InterpolationMode = InterpolationMode.HighQualityBilinear; gBmpOut.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; //陰影光暈 for (int x = 0; x <= blurAmount; x++) { for (int y = 0; y <= blurAmount; y++) { gBmpOut.DrawImageUnscaled(bmp, x, y); } } gBmpOut.DrawString(strText, fnt, brFore, blurAmount / 2, blurAmount / 2); } } } return bmpOut; } ////// 文本轉圖片 /// /// /// /// /// /// ///public static System.Windows.Media.Imaging.BitmapImage BitmapImageFromText(string strText, Font fnt, Color clrFore, Color clrBack, int blurAmount = 5) { return BitmapToBitmapImage(ImageFromText(strText, fnt, clrFore, clrBack, blurAmount)); } } }
應用:
(1)XMAL代碼
(2)code behind
var backColor = System.Drawing.ColorTranslator.FromHtml("#037be2"); var forColor= System.Drawing.ColorTranslator.FromHtml("#ffffff"); img.Source = FancyText.BitmapImageFromText("測試字體,微軟雅黑", new System.Drawing.Font("Microsoft YaHei", 60, System.Drawing.FontStyle.Bold), forColor, backColor, 6); img1.Source = FancyText.BitmapImageFromText("外發光+描邊", new System.Drawing.Font("Microsoft YaHei", 30, System.Drawing.FontStyle.Bold), forColor, backColor, 3);
效果:
優化點:可以將FancyText封裝成自定義控件,定義描邊大小,顏色值等依賴屬性,直接為WPF使用。
原文鏈接:https://www.cnblogs.com/xunyou/p/11596220.html
相關推薦
- 2023-02-05 Redis處理高并發之布隆過濾器詳解_Redis
- 2023-05-08 C語言超詳細講解雙向帶頭循環鏈表_C 語言
- 2022-09-05 SparkStreaming寫入Hive慢
- 2022-09-18 K8s實戰教程之容器和?Pods資源分配問題_云其它
- 2022-07-10 如何替換重構依賴里面的Service
- 2023-03-01 Python開根號的幾種方式詳解_python
- 2022-08-15 數據結構之數組棧的實現
- 2022-03-12 Android列表點擊事件定義的一些思考_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支