1. 程式人生 > >WPF GDI+字串繪製成圖片(一)

WPF GDI+字串繪製成圖片(一)

本章講述:在WPF中,使用GDI+技術,把字串資料,根據文字字型樣式,大小繪製成字串圖片;

1、XAML前臺程式碼

<Window x:Class="WPF_GDI_Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="625">
    <Grid>
        <Image Name="img"/>
    </Grid>
</Window>

2、後臺邏輯實現

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Drawing;

namespace WPF_GDI_Test
{
    /// <summary>
    /// MainWindow.xaml 的互動邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Drawing();
        }

        private void Drawing()
        {
            string path = "C:\\WPF_GDI_Test.png";
            string fontFamily = "Microsoft YaHei";
            float fontSize = 100;
            string str1 = "Microsoft YaHei字型字串測";
            Font font = new Font(fontFamily,fontSize);

            Bitmap map1 = new Bitmap(1920, 1080);
            Graphics gg = Graphics.FromImage(map1);
            SizeF sizeF = gg.MeasureString(str1, new Font(fontFamily, fontSize));
            var size = TextRenderer.MeasureText(gg, str1, font, new System.Drawing.Size(0, 0));

            FormattedText forma =  Get_StrWidth(str1,fontFamily,fontSize);
            string strszie = string.Format("W = {0}, H = {1}", forma.Width, forma.Height);
            string strszie1 = string.Format("W = {0}, H = {1}", sizeF.Width, sizeF.Height);
            string strszie2 = string.Format("W = {0}, H = {1}", size.Width, size.Height);

            Bitmap map = new Bitmap(1920, 1080);
            Graphics g = Graphics.FromImage(map);
            g.PageUnit = GraphicsUnit.Pixel;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.Clear(System.Drawing.Color.Black);
            g.DrawRectangle(new System.Drawing.Pen(System.Drawing.Color.Red, 4), 10, 10, 1900, 1060);

            g.DrawString(str1, font, System.Drawing.Brushes.Green, 0, 0);
            g.DrawString(strszie, font, System.Drawing.Brushes.Yellow, 0, 200);
            g.DrawString(strszie1, font, System.Drawing.Brushes.OrangeRed, 0, 400);
            g.DrawString(strszie2, font, System.Drawing.Brushes.Yellow, 0, 600);


            g.Dispose();
            map.Save(path, System.Drawing.Imaging.ImageFormat.Png);
            map.Dispose();

            BitmpToImageSource(path);
        }

        private FormattedText Get_StrWidth(string txt, string fontFamily, double fontSize)
        {  
            FormattedText formattedText = new FormattedText(
                    txt,
                    System.Globalization.CultureInfo.InvariantCulture,
                   System.Windows.FlowDirection.LeftToRight,
                        new Typeface(fontFamily.ToString()),
                        fontSize,
                        System.Windows.Media.Brushes.Red
                );

            return formattedText;
        }

        private void BitmpToImageSource(string filepath)
        {
            System.IO.FileStream fs =new System.IO.FileStream(filepath,System.IO.FileMode.Open, System.IO.FileAccess.Read);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();
            fs.Dispose();

            System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.BeginInit();
            bitmapImage.StreamSource = ms;
            bitmapImage.EndInit();

            img.Source = bitmapImage;
        }
    }
}

3、效果圖:

相關推薦

WPF GDI+字串繪製圖片

本章講述:在WPF中,使用GDI+技術,把字串資料,根據文字字型樣式,大小繪製成字串圖片; 1、XAML前臺程式碼 <Window x:Class="WPF_GDI_Test.MainWindow" xmlns="http://schemas.mic

WPF GDI+字符串繪制圖片

inf lan acc [] isp tails mea summary blog 原文:WPF GDI+字符串繪制成圖片(一)

WPF Button按鈕模板樣式修改

本章講述:Button簡單模板樣式的修改,圓角矩形按鈕實現; 主要通過修改控制元件模板以達到效果; XAML前端樣式程式碼:通過Border來控制控制元件的圓角;採用屬性觸發器控制滑鼠操作時,改變前景色和背景色。 <Style x:Key="ExButton" TargetTy

Python 字串內建方法

以下方法只需要知道用法就行了,權當了解,不用硬背,以後需要用到的時候再回來看 說明: 一般方法中前面是is開頭的就是判斷來的,輸出不是True就是False,例如isalpha()方法 capitalize()方法:首字母大寫 In [1]: a='abc' In [2]: a.capit

angularjs手機webapp 利用input拍照,相簿選擇、縮圖顯示 上傳圖片

執行後的截圖: html程式碼 <ul class="list_img"> <li ng-repeat="imageSrc in imgshows track by $index"> <img n

Essential Studio for WPF 2018 v3最新版釋出

Essential Studio for WPF控制元件是用於建立利於分析且高效能的Windows應用程式,包含了利於分析且高效能的Windows應用程式開發中所需的所有控制元件,如 grids、charts、gauges、menus、calendars、editors等等,還能匯出資料到Excel、Wo

C語言字串處理基礎函式

1.strlen()函式 功能:函式返回字串str 的長度( 即空值結束符之前字元數目,不包括控制結束符)。 語法: #include <string.h> size_t strlen( char *str ); 例子: #include <stdio

C# WPF 基礎教程 視訊學習筆記

1.[STAThread()] 代表單執行緒 2.using語句允許程式設計師指定使用資源的物件應當何時釋放資源 3.Border 一般用於裝載面板   Padding 邊框和內部內容中間新增空間   CornerRadius可以使邊框具有一個圓角     4.DockP

字串轉換整數Java

題目:字串轉換為整數。 思路:將字串轉化為整數首先是遍歷字串中的每一個字元,有三種情況:首字元是正號,首字元是負號,首字元非正負號;然後遍歷每一個字元進行num = num * 10 + charAr

wangEditor的使用及上傳圖片

      由於業務需要,最近新入手了一款富文字編輯器wangEditor,這是一款輕量級的富文字編輯器,比起百度的ueditor,這款編輯器的介面更加簡單,文件也很詳細。對於需求不是很高的功能來說,這款編輯器實在是不二之選。 一、wangEditor的基

利用協程asyncio爬取搜狗美女圖片——asyncio庫的介紹和使用

上一節,我們通過分析ajax爬取搜狗美女圖片,(連結https://blog.csdn.net/MG1723054/article/details/81735834)這樣爬取的效率相對來說比較高,在文章的末尾我們使用程序池來提高效率,但是由於爬蟲主要是密集型IO操作,利用程序對其提高時效率不高,

王者榮耀是怎樣煉 王者榮耀 用什麼開發,遊戲入門,unity3D介紹

                在國內,如果你沒有聽說過《王者榮耀》,那你一定是古董級的人物了。   《王者

cropper裁剪圖片

1、前言 在上傳圖片的過程中,我們經常會限制上傳圖片的尺寸,但是我們的圖片來源尺寸各異。所以在上傳之前需要先裁剪圖片然後再上傳。今天使用一種外掛cropper.js這個外掛完成幾個小demo,記錄一下,以備後續使用。 2、使用前準備 cropper該外掛有兩

字串轉換整數atoi函式的具體實現

程式碼如下: #include "stdio.h" int Atoi(char* str) {int sum=0;while(*str!='\0'){if (*str>='0' && *str<='9'){sum=sum*10+*str-'0';

多媒體封裝格式學習:H264封裝FLV

         搞了好幾天的FLV封裝,話說封裝真是個苦力活,有時候思路不是很清晰的時候,真心有點亂。          網上關於H264封裝成FLV的文件,都分析的很詳細了,但是有幾個點沒有考慮到,一會在下面我會一一跟大家說明。圖什麼的我就不畫了,網上一搜應該有很多,那

CSS3繪製不規則圖形

由於近期的專案中出現了不規則的邊框和圖形, 所以只好提前先溫習一下,以前收集的一些CSS3繪製的圖形。。。樣式繪製的圖形比圖片的效能要好,體驗更佳。廢話不多說,我們直接看效果:1、三角形系列(三角形、倒三角、左三角、右三角、左上三角、右上三角、左下三角、右下三角)    主要

WPF 的 MVVM 的分析理解

第三步:新增執行動作和“INotifyPropertyChanged”介面 應用程式不僅僅只是有 textboxs 和 labels, 同樣還需要執行動作,比如按鈕,滑鼠事件等。 因此讓我們新增一個按鈕來看看如何把 MVVM 類應用起來。 我們在同樣的 UI 上添加了一個‘Calculate tax’按鈕,

記錄使用echarts的graph型別繪製流程圖全過程-x,y位置的計算

先說下本次案例業務需求,輸入2個節點,獲取資料後繪製出2個節點間的路徑,之前使用的是網狀圖,但是網狀圖的效果不佳,需要轉換成流程圖的模式: 那麼如何在不修改資料的情況下,實現類似效果尼? 看了下echarts的graph型別,可以實現類似的,下面是官方的例項 從例項中可以看出,難點在於節點的顯示位置x

零基礎爬取堆糖網圖片

## 零基礎爬取堆糖網圖片(一) ### 全文介紹: 首先**堆糖網**是一個美圖桌布興趣社群,有大量的~~美女~~圖片 今天我們實現搜尋關鍵字爬取堆糖網上相關的美圖。 當然我們還可以實現多執行緒爬蟲,加快爬蟲爬取速度 ![](https://img2020.cnblogs.com/blog/1579925/

WPF原始碼分析系列:剖析WPF模板機制的內部實現

眾所周知,在WPF框架中,Visual類是可以提供渲染(render)支援的最頂層的類,所有視覺化元素(包括UIElement、FrameworkElment、Control等)都直接或間接繼承自Visual類。一個WPF應用的使用者介面上的所有視覺化元素一起組成了一個視覺化樹(visual tree),任何