亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

解決C#全屏幕截圖的實現方法

2020-01-24 03:17:22
字體:
來源:轉載
供稿:網友
今天一位同事想寫一個全屏幕截圖的代碼。當然要實現的第一步是能夠獲取整個屏幕的位圖,記得Win32 API的CreateDC, BitBlt等函數可以使用。于是上網查了下,果然屏幕截圖用這些函數。但winform已經可以把API都忘記了,所以得尋找一個無Win32 API的實現方式。綜合了網上的實現,以及自己的一些設計,實現思路如下:
1. 開始截圖時,創建一個與屏幕大小一樣的位圖,然后用Graphics.CopyFromScreen()把屏幕位圖拷貝到該位圖上。這是很關鍵的一步,這樣所有的操作就都可以在該位圖上進行了,而無實際屏幕無關了。 
復制代碼 代碼如下:

Code
int width = Screen.PrimaryScreen.Bounds.Width;
int height = Screen.PrimaryScreen.Bounds.Height;
Bitmap bmp = new Bitmap(width, height);
using (Graphics g = Graphics.FromImage(bmp)) {
    g.CopyFromScreen(0, 0, 0, 0, new Size(width, height));
}

2. 接下來為了方便在這之上進行截圖,有一個很重要的設計實現方式:用全屏幕窗體代替現有真實屏幕,這樣就可以把截圖過程的所有操作都在那個窗體上實現(該窗體設置成無邊框,高寬等于屏幕大小即可),另外為了顯示掩蔽效果(只能正常顯示選擇的部分屏幕內容,而其實部分用一個如半透明層覆蓋),就添加一層半透明位置位圖。具體代碼如下:
復制代碼 代碼如下:

Code
public partial class FullScreenForm : Form {
    private Rectangle rectSelected = Rectangle.Empty;
    private bool isClipping = false;
    private Bitmap screen;
    private Bitmap coverLayer = null;
    private Color coverColor;
    private Brush rectBrush = null;
    private Bitmap resultBmp = null;
    public FullScreenForm(Bitmap screen) {
        InitializeComponent();
        int width = Screen.PrimaryScreen.Bounds.Width;
        int height = Screen.PrimaryScreen.Bounds.Height;
        coverLayer = new Bitmap(width, height);
        coverColor = Color.FromArgb(50, 200, 0, 0);
        rectBrush = new SolidBrush(coverColor);
        using (Graphics g = Graphics.FromImage(coverLayer)) {
            g.Clear(coverColor);
        }
        this.Bounds = new Rectangle(0, 0, width, height);
        this.screen = screen;
        this.DoubleBuffered = true;
    }
    protected override void OnMouseDown(MouseEventArgs e) {
        if (e.Button == MouseButtons.Left) {
            isClipping = true;
            rectSelected.Location = e.Location;
        }
        else if (e.Button == MouseButtons.Right) {
            this.DialogResult = DialogResult.OK;
        }
    }
    protected override void OnMouseMove(MouseEventArgs e) {
        if (e.Button == MouseButtons.Left && isClipping) {
            rectSelected.Width = e.X - rectSelected.X;
            rectSelected.Height = e.Y - rectSelected.Y;

            this.Invalidate();
        }
    }
    protected override void OnMouseUp(MouseEventArgs e) {
        if (e.Button == MouseButtons.Left && isClipping) {
            rectSelected.Width = e.X - rectSelected.X;
            rectSelected.Height = e.Y - rectSelected.Y;
            this.Invalidate();
            resultBmp = new Bitmap(rectSelected.Width, rectSelected.Height);
            using (Graphics g = Graphics.FromImage(resultBmp)) {
                g.DrawImage(screen,new Rectangle(0, 0, rectSelected.Width, rectSelected.Height), rectSelected, GraphicsUnit.Pixel);
            }
            this.DialogResult = DialogResult.OK;
        }
    }
    protected override void OnPaint(PaintEventArgs e) {
        Graphics g = e.Graphics;
        g.DrawImage(screen, 0, 0);
        g.DrawImage(coverLayer, 0, 0);
        PaintRectangle();
    }
    protected override void OnPaintBackground(PaintEventArgs e) {

    }
    protected override void OnKeyDown(KeyEventArgs e) {
        if (e.KeyCode == Keys.Escape) {
            this.DialogResult = DialogResult.Cancel;
        }
    }
    private void PaintRectangle() {
        using (Graphics g = Graphics.FromImage(coverLayer)) {
            g.Clear(coverColor);
            GraphicsPath path = new GraphicsPath();
            path.AddRectangle(this.Bounds);
            path.AddRectangle(rectSelected);
            g.FillPath(rectBrush, path);
            g.DrawRectangle(Pens.Blue, rectSelected);
        }
    }
    public Bitmap ResultBitmap {
        get { return resultBmp; }
    }
}

上面的代碼都很容易看明白,這里有一個技巧就是GraphicsPath,它自動會形成一個中空的區域。上面的實現很容易擴展:多區域截圖,多裁判截圖等都很容易實現。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频在线播放| 欧美精品在线第一页| 国产精品久久久久aaaa九色| 国产精品手机播放| 亚洲人成在线一二| 色综合亚洲精品激情狠狠| 91精品国产777在线观看| 最近2019中文字幕在线高清| 亚洲自拍偷拍一区| 亚洲第一av网| 中文字幕免费精品一区| 国产精品免费视频xxxx| 日本久久久久亚洲中字幕| 日韩在线精品视频| 人妖精品videosex性欧美| 欧美一区深夜视频| 亚洲女人天堂网| 亚洲a一级视频| 亚洲人成在线观看网站高清| 国产视频在线观看一区二区| 激情成人在线视频| 少妇av一区二区三区| 亚洲直播在线一区| 日韩成人小视频| 久久久久北条麻妃免费看| 国产视频精品自拍| 日韩中文字幕免费视频| 国产精品美女无圣光视频| 国模精品系列视频| 久久影院中文字幕| 日韩高清电影好看的电视剧电影| 国产亚洲精品久久久久久牛牛| 欧美日韩一区二区免费视频| 久久久久久久久久婷婷| 91人成网站www| 日韩国产高清污视频在线观看| 欧美视频中文在线看| 91精品在线影院| 亚洲中国色老太| 国产精品成人va在线观看| 欧美天天综合色影久久精品| 久久久久久噜噜噜久久久精品| 这里只有视频精品| 国产专区精品视频| 亚洲美女性生活视频| 国产精品久久一区主播| 精品国产一区二区三区久久狼5月| xx视频.9999.com| 一区二区在线免费视频| 午夜精品一区二区三区在线| 91精品国产高清自在线看超| 久久久久一本一区二区青青蜜月| 国产一区二区三区欧美| 青草青草久热精品视频在线观看| 日韩欧美一区视频| 亚洲精品v欧美精品v日韩精品| 久久久久免费视频| 日韩一级黄色av| 亚洲电影免费在线观看| 久久精品国产亚洲精品2020| 欧美亚洲另类激情另类| 91精品在线观看视频| 欧美精品免费播放| 色偷偷av一区二区三区| 成人国产精品久久久| 日韩av影片在线观看| 国内精品久久影院| 国产精品视频公开费视频| 伊人伊人伊人久久| 亚洲影院色在线观看免费| 91亚洲精品久久久久久久久久久久| 欧美极品欧美精品欧美视频| 欧美黄色片免费观看| 91久久精品日日躁夜夜躁国产| 欧美日韩亚洲一区二区| 国产91九色视频| 日韩欧美亚洲范冰冰与中字| 欧美精品一区三区| 亚洲va国产va天堂va久久| 亚洲精品videossex少妇| 国产亚洲欧美一区| 欧美激情第一页xxx| 亚洲伊人第一页| 高清日韩电视剧大全免费播放在线观看| 97精品一区二区视频在线观看| 日韩av片免费在线观看| www.国产一区| 久久伊人91精品综合网站| 国产精品美女久久久免费| 中文字幕欧美视频在线| 北条麻妃99精品青青久久| 亚洲国产精品福利| 亚洲色图日韩av| 欧美黑人一区二区三区| 日韩电影视频免费| 91影视免费在线观看| 日韩中文字幕视频在线观看| 久久这里只有精品99| 欧美日韩国产页| 亚洲精品国产成人| 日韩在线观看免费| 51色欧美片视频在线观看| 日韩美女在线观看一区| 米奇精品一区二区三区在线观看| 日韩中文字幕国产精品| 亚洲一区二区免费| 亚洲一区二区三区乱码aⅴ| 成人性教育视频在线观看| 欧美激情一区二区三区高清视频| 日韩精品中文在线观看| 久久精品亚洲国产| 久久综合免费视频| 久久综合久久88| 免费av在线一区| 中国人与牲禽动交精品| 久久99热这里只有精品国产| 久久精品在线视频| 日韩av电影中文字幕| 日韩一区二区在线视频| 97人人爽人人喊人人模波多| 久久精品亚洲94久久精品| 精品国产拍在线观看| 国产精品成人免费视频| 精品国产乱码久久久久久虫虫漫画| 亚洲欧美国产日韩中文字幕| 91精品国产成人| 亚洲电影免费观看高清完整版在线观看| 欧美午夜www高清视频| 日本精品一区二区三区在线播放视频| 久久久久久香蕉网| 久久久久久久久久久成人| 成人欧美一区二区三区在线| 九九精品视频在线观看| 国产成人精品在线视频| 成人激情视频在线观看| 亚洲欧美精品中文字幕在线| 欧美一级片免费在线| 久久久99免费视频| 欧美一级黑人aaaaaaa做受| 亚洲欧美日韩精品久久奇米色影视| 欧美黑人国产人伦爽爽爽| 亚洲国产小视频| 精品日本美女福利在线观看| 97婷婷大伊香蕉精品视频| 亚洲专区在线视频| 精品亚洲国产成av人片传媒| 欧美激情精品久久久久久蜜臀| 亚洲欧美变态国产另类| 亚洲精美色品网站| 亚洲男女性事视频| 深夜精品寂寞黄网站在线观看| 亚洲午夜国产成人av电影男同| 亚洲伊人久久综合| 久久久久这里只有精品| 亚洲视屏在线播放| 国产91热爆ts人妖在线| 久久久精品亚洲| 亚洲精品自拍视频| 免费不卡欧美自拍视频| 97高清免费视频| 国产综合久久久久| 国产91在线播放九色快色| 国产精品专区h在线观看| 久久精品中文字幕一区|