欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

WPF程序?qū)⒖丶尸F(xiàn)的內(nèi)容保存成圖像

 更新時(shí)間:2022年06月18日 10:12:27   作者:天方  
這篇文章介紹了WPF程序?qū)⒖丶尸F(xiàn)的內(nèi)容保存成圖像的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

有的時(shí)候,我們需要將控件所呈現(xiàn)的內(nèi)容保存成圖像保存下來,例如:InkCanvas的手寫墨跡,WebBrowser中的網(wǎng)頁等。可能有人會(huì)說,這個(gè)不就是截圖嘛,找到控件的坐標(biāo)和大小,調(diào)用截圖API不就可以了嘛。的確,對(duì)于規(guī)則的控件來說,通過截圖的卻可以實(shí)現(xiàn),可是,如果控件不規(guī)則或不透明度不是100%,則會(huì)把其背景控件的視覺效果也給截取下來。

要實(shí)現(xiàn)只對(duì)控件進(jìn)行截圖,可以利用RenderTargetBitmap類獲取Visual對(duì)象的視覺效果,從而實(shí)現(xiàn)對(duì)控件截圖效果。

    RenderTargetBitmap RenderVisaulToBitmap(Visual vsual, int width, int height)
    {
        var rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
        rtb.Render(vsual);

        return rtb;
    }

這里需要說明一下,Visual對(duì)象的Alignment、Margin等影響布局的屬性也會(huì)獲取下來,例如,對(duì)如下按鈕截圖時(shí),

<Button Content="Button" Margin="10,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="75" Height="22" />

按鈕的起點(diǎn)坐標(biāo)就不是(0,0),而是(10,10)。如果我們要把按鈕的起點(diǎn)起點(diǎn)坐標(biāo)設(shè)置為(0,0),則需要在Button屬性把Alignment、Margin等屬性去掉。既要去掉Alignment、Margin等屬性,又要保持按鈕的位置和大小不變,一個(gè)簡(jiǎn)單的做法是在按鈕外面添加一個(gè)Border,在Broder中設(shè)置這些屬性(在VisualStudio和Blend中設(shè)置一下分組即可,一步即可完成)。

    <Border Margin="10,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="75" Height="22">
        <Button Content="Button"/>
    </Border>

通過RenderVisaulToBitmap函數(shù),就可以把控件的視覺效果轉(zhuǎn)換為RenderTargetBitmap對(duì)象了,RenderTargetBitmap對(duì)象繼承自BitmapSource,是可以直接在Image控件中顯示的。如果要更進(jìn)一步把它轉(zhuǎn)換為圖像,則可以按照我以前的文章給圖片加上陰影效果文章所示通過一個(gè)PngBitmapEncoder把BitmapSource對(duì)象保存為圖片。

        public enum ImageFormat { JPG, BMP, PNG, GIF, TIF }

        void GenerateImage(BitmapSource bitmap, ImageFormat format, Stream destStream)
        {
            BitmapEncoder encoder = null;

            switch (format)
            {
                case ImageFormat.JPG:
                    encoder = new JpegBitmapEncoder();
                    break;
                case ImageFormat.PNG:
                    encoder = new PngBitmapEncoder();
                    break;
                case ImageFormat.BMP:
                    encoder = new BmpBitmapEncoder();
                    break;
                case ImageFormat.GIF:
                    encoder = new GifBitmapEncoder();
                    break;
                case ImageFormat.TIF:
                    encoder = new TiffBitmapEncoder();
                    break;
                default:
                    throw new InvalidOperationException();
            }

            encoder.Frames.Add(BitmapFrame.Create(bitmap));
            encoder.Save(destStream);
        }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# 多線程處理List數(shù)據(jù)的示例代碼

    C# 多線程處理List數(shù)據(jù)的示例代碼

    這篇文章主要介紹了C# 多線程處理List數(shù)據(jù)的示例代碼,幫助大家更好的理解和使用c#編程語言,感興趣的朋友可以了解下
    2020-12-12
  • C#實(shí)現(xiàn)插入排序算法實(shí)例

    C#實(shí)現(xiàn)插入排序算法實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)插入排序算法,實(shí)例分析了插入排序算法的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-05-05
  • C#使用dynamic一行代碼實(shí)現(xiàn)反射操作

    C#使用dynamic一行代碼實(shí)現(xiàn)反射操作

    dynamic的出現(xiàn)讓C#具有了弱語言類型的特性。編譯器在編譯的時(shí)候不再對(duì)類型進(jìn)行檢查,編譯時(shí)默認(rèn)dynamic對(duì)象支持你想要的任何特性,這篇文章主要介紹了C#用dynamic一行代碼實(shí)現(xiàn)反射操作,需要的朋友可以參考下
    2023-04-04
  • DevExpress之ChartControl創(chuàng)建Drill-Down樣式的Title實(shí)例

    DevExpress之ChartControl創(chuàng)建Drill-Down樣式的Title實(shí)例

    這篇文章主要介紹了DevExpress之ChartControl創(chuàng)建Drill-Down樣式的Title實(shí)現(xiàn)方法,以實(shí)例形式講述了創(chuàng)建Drill-Down樣式的Title原理與實(shí)現(xiàn)過程,需要的朋友可以參考下
    2014-10-10
  • C#快速實(shí)現(xiàn)拖放操作

    C#快速實(shí)現(xiàn)拖放操作

    這篇文章介紹了C#快速實(shí)現(xiàn)拖放操作的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • WPF字體或內(nèi)容模糊的解決方法

    WPF字體或內(nèi)容模糊的解決方法

    WPF下開發(fā)的程序字體模糊,這個(gè)問題或許大家都有遇到過,為了解決WPF字體模糊,查閱了各種資料,結(jié)果偶然發(fā)現(xiàn)是自己疏忽了一些細(xì)節(jié)造成的,具體是什么細(xì)節(jié)呢,通過下面的這篇文章來一起看看吧,有需要的朋友們可以參考借鑒。
    2016-12-12
  • C#同步、異步遠(yuǎn)程下載文件實(shí)例

    C#同步、異步遠(yuǎn)程下載文件實(shí)例

    使用C#下載一個(gè)Internet上的文件主要是依靠HttpWebRequest/HttpWebResonse和WebClient。具體處理起來還有同步和異步兩種方式,所以我們其實(shí)有四種組合
    2014-04-04
  • C#調(diào)用OutLokk實(shí)現(xiàn)發(fā)送郵件

    C#調(diào)用OutLokk實(shí)現(xiàn)發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了如何利用C#調(diào)用OutLokk實(shí)現(xiàn)發(fā)送郵件的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#使用Twain協(xié)議開發(fā)一個(gè)高掃儀對(duì)接功能

    C#使用Twain協(xié)議開發(fā)一個(gè)高掃儀對(duì)接功能

    這篇文章主要為大家詳細(xì)介紹了C#如何使用Twain協(xié)議開發(fā)一個(gè)高掃儀對(duì)接功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • c# Graphics使用方法(畫圓寫字代碼)

    c# Graphics使用方法(畫圓寫字代碼)

    本文主要介紹了Graphics的使用方法,提供如何畫圓、寫字的代碼,大家參考使用吧
    2014-01-01

最新評(píng)論