最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF實(shí)現(xiàn)XAML轉(zhuǎn)圖片的示例詳解

 更新時(shí)間:2022年11月17日 15:47:18   作者:黑夜中的潛行者  
這篇文章主要為大家詳細(xì)介紹了如何利用WPF實(shí)現(xiàn)XAML轉(zhuǎn)圖片,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下

背景

在實(shí)際開(kāi)發(fā)過(guò)程中,會(huì)遇到需要編寫(xiě)各類(lèi)打印模板模板的需求,當(dāng)然這些在WPF開(kāi)發(fā)中更為常見(jiàn),但是使用XAML寫(xiě)編輯的打印模板又不能直接發(fā)送給打印機(jī)進(jìn)行打印,這個(gè)時(shí)候就需要將我們編寫(xiě)好的模板導(dǎo)出為可打印的文件,為什么選擇了圖片呢,是因?yàn)樵诒姸辔募袷街袌D片是最易于保存的,這點(diǎn)不僅凸顯在臨時(shí)保存更重要的是長(zhǎng)期保存,我們知道圖片可以使用Base64字符串、Byte字節(jié)在數(shù)據(jù)庫(kù)中進(jìn)行長(zhǎng)期保存,為后期讀取帶來(lái)極大的便利,即使模板更新了,也可以打印出很久以前的文件樣式。

在寫(xiě)代碼實(shí)現(xiàn)的時(shí)候也參考了很多人的實(shí)現(xiàn),基本都是使用Canvas一類(lèi)的控件標(biāo)簽來(lái)實(shí)現(xiàn)的,這樣弊端就很凸顯了,那就是必須先示例模板對(duì)象,才能夠獲取到模板的 Size 簡(jiǎn)單來(lái)說(shuō)就是在不預(yù)覽的情況下是不能轉(zhuǎn)出圖片的。

實(shí)現(xiàn)思路

這里稍加改變將 Element 改成 Control 這個(gè)時(shí)候我們的思路就是先獲取當(dāng)前Control實(shí)例的排版再更新布局,然后我們寫(xiě)一個(gè)方法用來(lái)檢索顯示預(yù)覽所需的大小。然后聲明一個(gè) RenderTargetBitmap 對(duì)象并設(shè)置一些基礎(chǔ)參數(shù)來(lái)接收內(nèi)存中的位圖。選擇想要的圖片轉(zhuǎn)換對(duì)象,保存即可。

這里做了一些擴(kuò)展,將常用的圖片類(lèi)型列了出來(lái),以便滿(mǎn)足不同需求。

代碼實(shí)現(xiàn)

using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace XAMLToImage
{
    public class Conversion
    {
        public static void GenerateImage(Control control, string imageType, string path)
        {
            using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
            {
                GenerateImage(control, imageType, stream);

                stream.Flush();
                stream.Close();
            }
        }

        public static void GenerateImage(Control control, string imageType, Stream result)
        {
            if (control == null) return;

            control.InvalidateArrange();
            control.UpdateLayout();
            control.Background = Brushes.White;

            Size controlSize = RetrieveDesiredSize(control);
            Rect rect = new Rect(0, 0, controlSize.Width, controlSize.Height);
            RenderTargetBitmap bitmapRender = new RenderTargetBitmap((int)controlSize.Width, (int)controlSize.Height, 96, 96, PixelFormats.Pbgra32);

            control.Arrange(rect);
            bitmapRender.Render(control);

            BitmapEncoder encoder = null;
            //選取編碼器
            switch (imageType.ToUpper())
            {
                case "BMP":
                    encoder = new BmpBitmapEncoder();
                    break;
                case "GIF":
                    encoder = new GifBitmapEncoder();
                    break;
                case "JPEG":
                    encoder = new JpegBitmapEncoder();
                    break;
                case "PNG":
                    encoder = new PngBitmapEncoder();
                    break;
                case "TIFF":
                    encoder = new TiffBitmapEncoder();
                    break;
                default:
                    break;
            }

            encoder.Frames.Add(BitmapFrame.Create(bitmapRender));
            encoder.Save(result);
        }

        private static Size RetrieveDesiredSize(Control control)
        {
            control.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
            return control.DesiredSize;
        }
    }
}

可擴(kuò)展

這里做一個(gè)小小的擴(kuò)展,既然我們使用了Control作為模板,那么我們可以實(shí)現(xiàn)一個(gè)軟件功能,就是將我們的模板統(tǒng)一使用XAML的Control來(lái)實(shí)現(xiàn),然后導(dǎo)入我們的軟件即可實(shí)現(xiàn)將設(shè)計(jì)好的模板、圖形甚至是單界面原型將其導(dǎo)出。

到此這篇關(guān)于WPF實(shí)現(xiàn)XAML轉(zhuǎn)圖片的示例詳解的文章就介紹到這了,更多相關(guān)WPF XAML轉(zhuǎn)圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#判斷字符編碼的方法總結(jié)(六種方法)

    C#判斷字符編碼的方法總結(jié)(六種方法)

    這篇文章主要介紹了C#判斷字符編碼的方法,結(jié)合實(shí)例形式總結(jié)分析了六種C#判斷字符編碼的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • C#中winform實(shí)現(xiàn)自動(dòng)觸發(fā)鼠標(biāo)、鍵盤(pán)事件的方法

    C#中winform實(shí)現(xiàn)自動(dòng)觸發(fā)鼠標(biāo)、鍵盤(pán)事件的方法

    這篇文章主要介紹了C#中winform實(shí)現(xiàn)自動(dòng)觸發(fā)鼠標(biāo)、鍵盤(pán)事件的方法,是C#程序設(shè)計(jì)中非常實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • C#用正則表達(dá)式Regex.Matches 方法檢查字符串中重復(fù)出現(xiàn)的詞

    C#用正則表達(dá)式Regex.Matches 方法檢查字符串中重復(fù)出現(xiàn)的詞

    使用正則表達(dá)式用Regex類(lèi)的Matches方法,可以檢查字符串中重復(fù)出現(xiàn)的詞,Regex.Matches方法在輸入字符串中搜索正則表達(dá)式的所有匹配項(xiàng)并返回所有匹配,本文給大家分享C#正則表達(dá)式檢查重復(fù)出現(xiàn)的詞,感興趣的朋友一起看看吧
    2024-02-02
  • C#實(shí)現(xiàn)rar壓縮與解壓縮文件的方法

    C#實(shí)現(xiàn)rar壓縮與解壓縮文件的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)rar壓縮與解壓縮文件的方法,實(shí)例分析了C#利用winrar程序?qū)崿F(xiàn)文件的壓縮與解壓縮的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C#創(chuàng)建線(xiàn)程帶參數(shù)的方法

    C#創(chuàng)建線(xiàn)程帶參數(shù)的方法

    本文給大家介紹C#創(chuàng)建線(xiàn)程帶參數(shù)的方法,包括無(wú)參數(shù)線(xiàn)程的創(chuàng)建,帶一個(gè)參數(shù)線(xiàn)程的創(chuàng)建及帶兩個(gè)及以上參數(shù)線(xiàn)程的創(chuàng)建,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧
    2016-07-07
  • C#泛型的使用案例

    C#泛型的使用案例

    這篇文章介紹了C#泛型的使用案例,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • C#?線(xiàn)程簡(jiǎn)單介紹及使用詳情

    C#?線(xiàn)程簡(jiǎn)單介紹及使用詳情

    這篇文章主要介紹了C#?線(xiàn)程簡(jiǎn)單介紹及使用詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 如何使用C#掃描并讀取圖片中的文字

    如何使用C#掃描并讀取圖片中的文字

    本文介紹如何通過(guò)C# 程序來(lái)掃描并讀取圖片中的文字,這里以創(chuàng)建一個(gè).Net Core程序?yàn)槔?。下面是具體步驟,供參考。有此需求的朋友可以了解下
    2021-06-06
  • 如何使用LinQ To Object把數(shù)組或DataTable中的數(shù)據(jù)進(jìn)行向上匯總

    如何使用LinQ To Object把數(shù)組或DataTable中的數(shù)據(jù)進(jìn)行向上匯總

    這篇文章主要介紹了如何使用LinQ To Object把數(shù)組或DataTable中的數(shù)據(jù)進(jìn)行向上匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • WPF如何實(shí)現(xiàn)日期范圍選擇器

    WPF如何實(shí)現(xiàn)日期范圍選擇器

    這篇文章主要為大家詳細(xì)介紹了WPF如何實(shí)現(xiàn)日期范圍選擇器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11

最新評(píng)論

柯坪县| 岑溪市| 西林县| 浙江省| 图片| 灵川县| 定陶县| 阿拉善右旗| 柏乡县| 常德市| 阳春市| 鲁甸县| 黎城县| 石泉县| 迁西县| 吴旗县| 大足县| 虹口区| 岢岚县| 花垣县| 绥化市| 蓬溪县| 横峰县| 商洛市| 红河县| 梨树县| 六枝特区| 麻阳| 沛县| 蕉岭县| 来安县| 兴仁县| 巴彦淖尔市| 逊克县| 贵溪市| 什邡市| 沿河| 古蔺县| 五家渠市| 玉溪市| 三原县|