首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用SlimDX捕获区域

用SlimDX捕获区域
EN

Stack Overflow用户
提问于 2017-03-22 17:51:41
回答 1查看 261关注 0票数 0

所以我试着用SlimDX来捕捉一个区域。我的意思是,我不想从[0,0]捕捉到[1920,1080]。最好是传递一个矩形对象,该对象保存捕获所需的信息。

我想用SlimDX (DirectX)来实现这一点,因为如果我们考虑CopyFromScreen这样的替代方案,它将大大缩短捕获时间。

我需要捕获大约30块100×100像素,我认为使用DirectX可能是最好的选择。所有启动的加上宽度/高度都存储在整数数组中。

我目前正在使用以下代码:

代码语言:javascript
运行
复制
Rectangle rect = new Rectangle(chunk[0], chunk[1], chunk[2], chunk[3]); 
Bitmap temp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb); 
Graphics g2 = Graphics.FromImage(temp); 
g2.CopyFromScreen(rect.Left, rect.Top, 0, 0, temp.Size, CopyPixelOperation.SourceCopy);

这段代码生活在一个foreach循环中,它在chunks变量上迭代。然而,这需要大约500毫秒来完成30次迭代。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-24 05:17:54

正如@Nico所指出的,复制一次然后拆分比许多小拷贝更快。下面是一个例子

代码语言:javascript
运行
复制
        var rects = Enumerable.Range(1, 30)
            .Select(x => new Rectangle(x, x, x + 100, x + 100));

        var bounds = Screen.PrimaryScreen.Bounds;
        Bitmap bigBmp = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppArgb);
        Graphics g2 = Graphics.FromImage(bigBmp);
        g2.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy);

        var bmps = rects.Select(rect =>
            {
                return bigBmp.Clone(rect, PixelFormat.Format32bppArgb);
            });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42959218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档