1. 程式人生 > >C#WinForm程式呼叫SVG,並動態在SVG圖上綁值

C#WinForm程式呼叫SVG,並動態在SVG圖上綁值

開始建立一個新的C #窗體應用程式,然後安裝SVG渲染庫使用NuGet包管理參考。
一、右鍵單擊解決方案資源管理器,選擇管理NuGet程式包;
這裡寫圖片描述

二、選擇聯機,右上角搜尋框輸入SVG;
這裡寫圖片描述

三、安裝SVG Rendering Library,完成後點關閉;
這裡寫圖片描述

四、此時svg.dll的版本可能與工程專案框架中版本不同,手動將專案版本設定為.Net FrameWork 4或其他版本;這裡寫圖片描述

五、應用程式包含一個單獨的類來儲存SVG操作程式碼。由於圖片框是一個固定大小的svgparser由按比例縮放SVG影象合適的圖片框。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using Svg;

namespace Common
{
public class SVGParser
{
///
///支援的最大影象大小
///
public static Size MaximumSize { get; set; }

    /// <summary>
    /// 將SVG檔案轉換為點陣圖影象。
    /// </summary>
    /// <param name="filePath">SVG影象的全路徑。</param>
    /// <returns>返回轉換點陣圖影象。</returns>
    public static Bitmap GetBitmapFromSVG(string filePath)
    {
        SvgDocument document = GetSvgDocument(filePath);

        Bitmap bmp = document.Draw();
        return bmp;
    }
    /// <summary>
    /// 獲取一個svgdocument操作使用提供的路徑。
    /// </summary>
    /// <param name="filePath">點陣圖影象的路徑.</param>
    /// <returns>返回SVG文件</returns>
    public static SvgDocument GetSvgDocument(string filePath)
    {
        SvgDocument document = SvgDocument.Open(filePath);
        return AdjustSize(document);
    }
    /// <summary>
    /// 確保影象不超過最大大小,同時保留縱橫比
    /// </summary>
    /// <param name="document">要調整大小的SVG文件</param>
    /// <returns>返回一個大小或根據該檔案的原始檔案。</returns>
    private static SvgDocument AdjustSize(SvgDocument document)
    {
        if (document.Height > MaximumSize.Height)
        {
            document.Width = (int)((document.Width / (double)document.Height) * MaximumSize.Height);
            document.Height = MaximumSize.Height;
        }
        return document;
    }
}

}

六、定義一個SVG全域性變數:
private Svg.SvgDocument _SvgDocument;

七、將SVG圖顯示到圖片控制元件pictConvertedImage中;
SVGParser.MaximumSize = new Size(pictConvertedImage.Width, pictConvertedImage.Height);
_SvgDocument = SVGParser.GetSvgDocument(svgPsth);

八、SVG圖提前給要顯示資料的位置綁好Text,並設定Id;
例如:這裡寫圖片描述

九、呼叫遞迴方法獲取SVG圖中id=”abc”的點,繫結相應值,並設定字型顏色;
///
/// 遞迴在svg圖上賦值
///
/// 配置列表中資料
/// Svg標識點Id
/// 對應標識點的資料
/// 顏色的RGB值
private void GetChild(SvgElement element, string Id, string value, string msgColor)
{
if ((element is SvgText) && element.ID == Id)
{
(element as SvgText).Text = value;
try
{
var fColor = Color.FromArgb(Convert.ToInt32(msgColor));
(element as SvgText).Fill = new SvgColourServer(fColor);
}
catch (Exception ex)
{
(element as SvgText).Fill = new SvgColourServer(Color.Lime);
}
}
if (element.Children.Count > 0)
{
foreach (Svg.SvgElement item in element.Children)
{
GetChild(item, Id, value, msgColor);
}
}

    十、點上幫完資料之後,重繪SVG圖,當不會真正改變圖片內容;
     pictConvertedImage.Image = _SvgDocument.Draw();

相關推薦

C#WinForm程式呼叫SVG動態SVG

開始建立一個新的C #窗體應用程式,然後安裝SVG渲染庫使用NuGet包管理參考。 一、右鍵單擊解決方案資源管理器,選擇管理NuGet程式包; 二、選擇聯機,右上角搜尋框輸入SVG; 三、安裝SVG Rendering Library,完成後點關閉

微信小程式 修改資料動態渲染頁面;修改陣列;

一、修改資料,並在頁面動態渲染   this.setData({     txt: '12112'   }) 二、修改陣列 var rotateClassItem = 'rotateClass['+ index + ']'; t

C#:讀取html模板檔案替換修改檔案中指定儲存為修改後的檔案

1.準備html模板檔案:Pages/Device/DeviceModel8.html   2 using System.IO:讀取檔案內容,並替換指定內容                  &nbs

C#Winform程式如何使用ClickOnce釋出自動升級(圖解)

有不少朋友問到C#Winform程式怎麼樣配置升級,怎麼樣打包,怎麼樣釋出的,在這裡我解釋一下打包和釋出 關於打包的大家可以看我的文章C# winform程式怎麼打包成安裝專案(圖解) 其實打包是打包

C# WinForm 程式單例項執行再次執行時啟用前一個例項

一個簡單的小程式,演示了winform程式如何執行單例項。當有例項執行時,再次單擊,會啟用第一個例項。 附主要原始碼: Program.cs using System; using System.Collections.Generic; using System.Linq

div寬度固定將其中的文字換行動態獲取div的高

rip title oat clas 獲取 pre jquery logs -c <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&

c#獲取當前系統時間提取按格式提取年月日為字符串

sta ogr mon 系統 ram AR 當前系統時間 ren 獲取 class Program { static void Main(String[] args) { DateTime currentTi

c# Winform登陸介面設計登陸使用者不同許可權設定

要求:登陸介面,使用者只有管理員和普通使用者           管理員可以進行資料庫的增、刪、改、查;         

C# WINFORM程式配置檔案操作方法

C# WINFORM程式配置檔案操作方法 在寫winform程式的時候,我們經常會把配置檔案寫在Settings.settings中, 但是,在這裡我們發現,儲存後,在程式中對這個配置進行修改並不能生效 程式級別的配置呢,我常用儲存在app.config中的appSettings節點中

python 匯入模組(使用程式匯入模組簡單對錯誤處理)

在python 中如果需要匯入一些模組,可以使用import xxx 或者使用from xx import xx 。只有這一種方式嗎,當然不是,還有一種就是使用程式碼將一些模組匯入。使用到的是 ` importlib ` 這個模組。 一般用法: import importlib imp

C語言 十進位制轉二進位制儲存在陣列中

#include <stdio.h> #define uint unsigned int #define ushort unsigned short uint transform_data(uint frequence,ushort* pwm_table) { uint temp

C# winform程式以管理員執行

一,選擇專案工程,右鍵 - 新增 - 新建項 - 應用程式清單檔案(字尾名為manifest) - 新增; 二,開啟剛新建的應用程式清單檔案(app.manifest),修改程式碼如下: 找到requestedExecutionLevel,將屬性級別的值修改為:requireAdminist

利用irc伺服器做物聯網資料轉發 c# winform程式

利用irc協議的優點: 免費,不用購買伺服器就可以實現穩定公網轉發資料 開源,irc的客戶端和開源庫眾多,省去了自己造輪子的時間 歷史悠久,網際網路誕生伊始就有irc   缺點:安全性比較差   簡單協議接收可以用:https://kiwiirc.com/ 下面是傳送客戶端

element el-tree循環遍歷樹形結構動態disabled屬性

lse form 遍歷樹 alt fin img all uid 2-2 淩晨3點,功夫不負有心人,已經累趴,效果終於出來: 貼上代碼: <style scoped> .form { width: 50%; } </style>

c++對vector進行排序返回索引

測試程式碼:(對向量進行排序,取一定範圍內的數值)                 vector<int> vec = {5,31,9,11,8,21,9,7,4};     

windows下idea編寫WordCount程式打jar包傳到hadoop叢集執行(傻瓜版)

通常會在IDE中編制程式,然後打成jar包,然後提交到叢集,最常用的是建立一個Maven專案,利用Maven來管理jar包的依賴。 一、生成WordCount的jar包 1. 開啟IDEA,File→New→Project→Maven→Next→填寫Groupld和Artifactld→Ne

VS 2017 C++ 顯示螢幕視窗輸入顯示螢幕輸出

使用 cin >>  Variable name;//從鍵盤輸入字元 如果使用 一個 cin.get(); 在輸入字元後,螢幕視窗會消失。 這時候,需要兩個 cin.get();  語句

linux下python程式後臺執行將列印資訊儲存檔案

在跑比較時間比較長的程式,或者是列印資訊比較多的程式時,一般都會後臺執行程式,然後把列印資訊儲存在檔案中,等程式執行結束後再檢查輸出日誌。完成該功能可以用如下命令: nuhup python -u test.py > test.log 2>&1 &

利用C語言生成的資料作圖-生成SVG(不借助任何作圖工具)

=" 1.00E+02 3.50E+02 1.04E+02 3.21E+02 1.08E+02 2.46E+02 1.11E+02 1.54E+02 1.15E+02 8.06E+01 1.19E+02 5.38E+01 1.23E+02 8.31E+01 1.26E+02 1.56E+02 1.30E+02

C語言 實現讀取檔案統計每個字元出現的個數

/***************** 實現讀取檔案,並統計每個字元出現的個數 *****************/ #include <stdio.h> #include <stdlib.h> unsigned long file_size;