c#捕获并在无限循环中截取窗口的屏幕截图

时间:2016-08-12 08:43:01

标签: c# screenshot emgucv

我在无限循环中制作窗口的屏幕截图 它运作良好。 但我希望它可以改进。 当我运行我的项目时,它有一个垃圾延迟从“PictureBox”复制“Myscreen”。

有人有想法吗? 或者你知道其他任何解决方案吗?

我只想不断地获得Screen的BITMAP。(更快..)

以下是屏幕截图功能。

public static Bitmap ScreenCapture_B(System.Windows.Forms.Screen MyScreen)
    {

        try
        {
            Rectangle rect = MyScreen.Bounds;
            // 2nd screen = Screen.AllScreens[1]
            int bitsPerPixel = MyScreen.BitsPerPixel;
            PixelFormat pixelFormat = PixelFormat.Format32bppArgb;
            if (bitsPerPixel <= 16)
            {
                pixelFormat = PixelFormat.Format16bppRgb565;
            }
            if (bitsPerPixel == 24)
            {
                pixelFormat = PixelFormat.Format24bppRgb;
            }
            else
            {
                pixelFormat = PixelFormat.Format24bppRgb;
            }
            Bitmap bmp = new Bitmap(rect.Width, rect.Height, pixelFormat);
            using (Graphics gr = Graphics.FromImage(bmp))
            {
                // 화면을 그대로 카피해서 Bitmap 메모리에 저장
                gr.CopyFromScreen(rect.Left, rect.Top, 0, 0, rect.Size);
            }
            return bmp;
        }
        catch(Exception)
        {
            throw;
        }
    }

Bellow来源是Thread。

public void ThreadLoop()
    {
        try
        {
            //infinite loop
            while (true)
            {
                bm = null;
                Screen MyScreen = Screen.PrimaryScreen;
                bm = ScreenCapture_B(MyScreen);
                setImage(bm, pictureEdit1);                    
                Bitmap btimage = new Bitmap(pictureEdit1.Image);
                ProcessImage_new(btimage);
            }

        }
        catch (Exception ex)
        {
            throw;
        }
    }

0 个答案:

没有答案