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

解決C# 截取當前程序窗口指定位置截圖的實現(xiàn)方法

 更新時間:2013年05月20日 11:07:16   投稿:jingxian  
本篇文章是對C#中截取當前程序窗口指定位置截圖的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下

要想完成這個功用,首先要了解一下在C#中如何調用API(利用程序交口)函數(shù)。固然在.Net框架中已經(jīng)降求了很多類庫,400電話,這些類庫的功效也非常強盛,但關于一些Windows頂層編程來道,仍是要通過調用這些API函數(shù)才可以實現(xiàn)。一切API皆在"Kernel"、"User "和"GDI"三個庫中得以運轉:其中"Kernel",他的庫名為 "KERNEL32.DLL", 他重要用于發(fā)生取操做體系之間的聯(lián)系關系,譬如:程序加載,上下文挑選,文件輸進輸出,內存治理等等。"User "這個類庫在Win32中名鳴 "USER32.DLL"。 它容許治理全體的用戶交心。譬如:窗心 、菜雙 、對話框 、圖本等等。"GDI"(圖象裝備交口),它正在Win32中的庫實為:"GDI32.dll",它是圖形輸出庫。使用GDI Windows"繪"出窗心、菜雙以及對話框等;它能創(chuàng)修圖形輸出;它也能保存圖形文件。因為原文所觸及到是圖象答題,一切調用的類庫是"GDI32.dll"。在原文程序中人們使用的API函數(shù)是"BitBlt",這個函數(shù)關于寬大程序員來道,必定沒有感覺到生疏,由于在圖象處置方面他的用處是絕對狹的,在用其他程序言語編程中,經(jīng)常也要和他挨接講。在.Net FrameWork SDK中有一個實字空間"System.Runtime.InteropServices",此名字空間降求了一系列的類來拜訪COM對象,和調用外地的API函數(shù)。下面是正在C#中聲亮此函數(shù):

復制代碼 代碼如下:

[ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ]
private static extern bool BitBlt (
    IntPtr hdcDest , // 目的 DC的句柄
    int nXDest ,
    int nYDest ,
    int nWidth ,
    int nHeight ,
    IntPtr hdcSrc , // 流DC的句柄
    int nXSrc ,
    int nYSrc ,
    System.Int32 dwRop // 光柵的處置數(shù)值
) ;

通過上面這個聲亮,就可以正在下里的代碼中使用此函數(shù)了。
下里是用C#做屏幕捕捉程序的詳細真隱步驟:
(1).首先要取得當前屏幕的graphic對象,通過以下代碼可以真隱:

Graphics g1 = this.CreateGraphics ( ) ;
首先要獲得當前屏幕的大小,通過實字空間"System.Windows.Forms"中的"Screen"類的GetWorkingArea()方式,可以實現(xiàn)。下面是得到當前屏幕的長(Height)和闊(Width):
Rectangle rect = new Rectangle ( ) ;
rect = Screen.GetWorkingArea ( this ) ;
"屏幕闊"= rect.Width ;
"屏幕長"= rect.Height ;
至彼便能夠失掉人們念要的Bitmap了,通功下列語句可以完成:
Image MyImage = new Bitmap ( rect.Width , rect.Height , g1 ) ;
//創(chuàng)修以屏幕大小為尺度的位圖
(3).取得當前屏幕和此Bitmap對于象的DC,那可以通功下列語句真隱:
//失掉屏幕的DC
IntPtr dc1 = g1.GetHdc ( ) ;
//失掉Bitmap的DC
IntPtr dc2 = g2.GetHdc ( ) ;
(4).調用API函數(shù),把以后屏幕拷貝到創(chuàng)立的Bitmap中:
BitBlt ( dc2 , 0 , 0 , rect.Width , rect.Height , dc1 , 0 , 0 , 13369376 ) ;
(5).開釋該前屏幕和彼Bitmap對于象的DC,通功下里代碼能夠完成:
//開釋掉屏幕的DC
g1.ReleaseHdc ( dc1 ) ;
//開釋掉Bitmap的DC
g2.ReleaseHdc ( dc2 ) ;
(6).保管Bitmap對于象,構成jpg圖片:
MyImage.Save ( @"c:\Capture.jpg" , ImageFormat.Jpeg );
該然你也可以依據(jù)本人的須要,把屏幕以其他圖片的格局來保管,假如您念把圖片保存為位圖文件,可以把"ImageFormat.Jpeg"更換成"ImageFormat.Bmp";念把圖片保管為Gif白件,便把"ImageFormat.Jpeg"更換成"ImageFormat.Gif"。您能夠保存的文件類型大約有十少類,那里便沒有逐個引見了,當然您也要相當轉變保留文件的后綴。
用C#來捕捉屏幕的流程序代碼(Capture.cs):
了解上面的這些步驟的實現(xiàn)方式,就可以得到用C#捕捉屏幕的流程序,如下:
復制代碼 代碼如下:

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using System.Drawing.Imaging ;
public class Form1 : Form
{
    private Button button1 ;
    private System.ComponentModel.Container components = null ;
public Form1 ( )
{
    //始初化窗體中的各個組件
    InitializeComponent ( ) ;
}
// 肅清程序中使用過的資源
protected override void Dispose ( bool disposing )
{
    if ( disposing )
    {
        if ( components != null )
        {
            components.Dispose ( ) ;
        }
    }
    base.Dispose ( disposing ) ;
}
private void InitializeComponent ( )
{
    button1 = new Button ( );
    SuspendLayout ( ) ;
    button1.Location = new System.Drawing.Point ( 64 , 40 ) ;
    button1.Name = "button1" ;
    button1.Size = new System.Drawing.Size ( 80 , 32 ) ;
    button1.TabIndex = 0 ;
    button1.Text = "捕捉" ;
    button1.Click += new System.EventHandler ( button1_Click ) ;
    AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ;
    ClientSize = new System.Drawing.Size ( 216 , 125 ) ;
    Controls.Add ( button1 ) ;
    MaximizeBox = false ;
    MinimizeBox = false ;
    Name = "Form1" ;
    Text = "C#捕捉以后屏幕!" ;
    ResumeLayout ( false ) ;
}
//聲亮一個API函數(shù)
    [ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ]
    private static extern bool BitBlt (
        IntPtr hdcDest , // 目的 DC的句柄
        int nXDest ,
        int nYDest ,
        int nWidth ,
        int nHeight ,
        IntPtr hdcSrc , // 源DC的句柄
        int nXSrc ,
        int nYSrc ,
        System.Int32 dwRop // 光柵的處置數(shù)值
    ) ;
static void Main ( )
{
    Application.Run ( new Form1 ( ) ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
    //取得當前屏幕的大小
    Rectangle rect = new Rectangle ( ) ;
    rect = Screen.GetWorkingArea ( this ) ;
    //創(chuàng)立一個以以后屏幕為模板的圖象
    Graphics g1 = this.CreateGraphics ( ) ;
    //創(chuàng)立以屏幕大小為尺度的位圖
    Image MyImage = new Bitmap ( rect.Width , rect.Height , g1 ) ;
    Graphics g2 = Graphics.FromImage ( MyImage ) ;
    //得到屏幕的DC
    IntPtr dc1 = g1.GetHdc ( ) ;
    //得到Bitmap的DC
    IntPtr dc2 = g2.GetHdc ( ) ;
    //調用彼API函數(shù),完成屏幕捕捉
    BitBlt ( dc2 , 0 , 0 , rect.Width , rect.Height , dc1 , 0 , 0 , 13369376 ) ;
    //開釋掉屏幕的DC
    g1.ReleaseHdc ( dc1 ) ;
    //開釋掉Bitmap的DC
    g2.ReleaseHdc ( dc2 ) ;
    //以JPG白件格局來保留
    MyImage.Save ( @"c:\Capture.jpg" , ImageFormat.Jpeg );
    MessageBox.Show ( "該前屏幕已經(jīng)保留為C盤的capture.jpg白件!" ) ;
}
}

相關文章

  • C# 創(chuàng)建,讀取,寫入XML文件

    C# 創(chuàng)建,讀取,寫入XML文件

    本篇文章主要介紹了C# 創(chuàng)建,讀取,寫入XML文件的方法,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • C#中獲取文件大小問題

    C#中獲取文件大小問題

    這篇文章主要介紹了C#中獲取文件大小問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C#二進制序列化實例分析

    C#二進制序列化實例分析

    這篇文章主要介紹了C#二進制序列化,實例分析了C#二進制序列化的方法,代碼中有較為詳盡的注釋說明,便于理解,需要的朋友可以參考下
    2015-05-05
  • Base64編碼解碼原理及C#編程實例

    Base64編碼解碼原理及C#編程實例

    這篇文章主要介紹了Base64編碼解碼原理及C#編程實例,本文講解了Base64編碼由來、Base64編碼原理、C#編程實現(xiàn),需要的朋友可以參考下
    2014-10-10
  • C#中的委托詳解

    C#中的委托詳解

    本文詳細講解了C#中的委托,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C# Rx的主要接口深入理解

    C# Rx的主要接口深入理解

    這篇文章主要介紹了C# Rx的主要接口深入理解的相關資料,需要的朋友可以參考下
    2017-03-03
  • C#讀取txt文件數(shù)據(jù)的方法實例

    C#讀取txt文件數(shù)據(jù)的方法實例

    讀取txt文本數(shù)據(jù)的內容,是我們開發(fā)中經(jīng)常會遇到的一個功能,這篇文章主要給大家介紹了關于C#讀取txt文件數(shù)據(jù)的相關資料,需要的朋友可以參考下
    2021-05-05
  • C#實現(xiàn)讀取二維數(shù)組集合并輸出到Word預設表格

    C#實現(xiàn)讀取二維數(shù)組集合并輸出到Word預設表格

    這篇文章主要為大家詳細介紹了如何使用C#實現(xiàn)讀取二維數(shù)組集合并輸出到Word預設表格,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • C#實現(xiàn)托盤程序并禁止多個應用實例運行的方法

    C#實現(xiàn)托盤程序并禁止多個應用實例運行的方法

    這篇文章主要介紹了C#實現(xiàn)托盤程序并禁止多個應用實例運行的方法,涉及C#中NotifyIcon控件的使用及設置標志位控制程序只運行一個的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • C#程序打成 一鍵安裝包-InstallShield教程

    C#程序打成 一鍵安裝包-InstallShield教程

    最近找到個打包工具,挺不錯的。下面簡單的介紹下使用方法
    2012-01-01

最新評論

斗六市| 沙河市| 介休市| 蓝山县| 琼海市| 罗江县| 汝州市| 南平市| 手机| 三门峡市| 洛宁县| 股票| 铁岭市| 庆城县| 明星| 松滋市| 康马县| 鄂州市| 平安县| 石门县| 丹东市| 宁化县| 福泉市| 西贡区| 衡水市| 泸州市| 霍城县| 尚义县| 信丰县| 安龙县| 扶绥县| 海南省| 广宗县| 抚松县| 兴安盟| 南投市| 潮州市| 丹江口市| 汉川市| 汝南县| 湖州市|