在窗体上绘制之前,先裁剪内存中的图形

ite

我正在尝试使用以下代码将屏幕的一部分复制到Windows窗体上的新位置。

private void Form1_Paint(object sender, PaintEventArgs e)
{
    var srcPoint = new Point(0,0);
    var dstPoint = new Point(Screen.PrimaryScreen.Bounds.Width/2, Screen.PrimaryScreen.Bounds.Height/2);
    var copySize = new Size(100, 100);

    e.Graphics.CopyFromScreen(srcPoint, dstPoint, copySize, CopyPixelOperation.SourceCopy);
}

CopyFromScreen函数似乎忽略了之前设置的所有剪辑。

e.SetClip(new Rectangle(srcPoint.X, srcPoint.Y, 20, 20));

我是在做错什么还是这只是错误的方法。

对于上下文:我正在尝试通过在边缘复制HUD并使其居中于中间位置来缓解UI宽屏游戏问题。

我知道FlawlessWidescreen,但是它不支持很多不受欢迎的游戏。我想在内存中闲逛(做些无瑕的事情)也可以,但是几乎总是反对TOS。

编辑:最终目标是复制一些任意路径作为形状而不是简单的矩形(我希望从图像蒙版中复制)。

编辑#2:所以我每100毫秒绘制一次不规则形状。事实证明,这只会暂停游戏,直到我将速度降低到每500毫秒一次。但是游戏仍然不顺利。复制和绘制图像的操作是否只是GDI +中的操作而已?我以为它很简单,不会停顿任何东西。

在我将答案标记为已接受之前有何想法?

塔瓦

我想这确实是错误的方法。

ClippingRegion仅用于削波DrawXXXFillXXX命令,包括DrawImage)。

CopyFromScreen然而,将使用给定PointsSize剪辑的来源。

对于Rectangle区域而言,这没有问题,因为您可以通过选择正确的PointSize来获得相同的结果

但是,一旦您打算使用更有趣的剪切区域,就必须使用Bitmap从屏幕上复制到其中的中间片段,然后再将其用于DrawImage剪切片段。

为此,您可以创建或多或少复杂的文件GraphicsPaths

这是一个代码示例:

将裁剪坐标放入Rectangle或后,GraphicsPath clip您可以编写如下内容:

e.Graphics.SetClip(clip);

using (Bitmap bitmap = new Bitmap(ClientSize.Width, ClientSize.Height))
{
    using (Graphics G = Graphics.FromImage(bitmap))
            G.CopyFromScreen(dstPoint, srcPoint, 
                             copySize, CopyPixelOperation.SourceCopy);
    e.Graphics.DrawImage(bitmap, 0, 0);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在窗体上的控件中创建值

来自分类Dev

如何从放置在窗体上的面板中捕获值

来自分类Dev

#名称?在Access 2010中重新查询后在窗体上

来自分类Dev

在窗口内绘制Windows窗体

来自分类Dev

在窗口内绘制Windows窗体

来自分类Dev

Windows窗体图形未绘制

来自分类Dev

在Windows窗体中循环遍历ArrayList并在窗体上显示

来自分类Dev

在Windows窗体中循环遍历ArrayList并在窗体上显示

来自分类Dev

当从另一个窗体触发按钮单击事件时,在窗体的面板中绘制一个矩形

来自分类Dev

在窗口调整大小之前,ChartJS不会在引导选项卡内绘制图形

来自分类Dev

始终在窗体上启用角度按钮

来自分类Dev

单选按钮在窗体上的位置

来自分类Dev

根据字段值在窗体上的addError

来自分类Dev

如何在窗体(Dynamics ax)上的UTCDatetime字段中删除时钟符号?

来自分类Dev

在窗体显示事件中启动任务

来自分类Dev

为什么在窗体显示事件之前触发Windows窗体控件单击事件?

来自分类Dev

如何在R中的图形上绘制多个类别变量?

来自分类Dev

在SageMath中的图形的顶点上绘制非注入标签

来自分类Dev

WPF中drawcontext绘制的几何图形上的阴影

来自分类Dev

将TMemo放在窗体上后,TMainMenu图标消失

来自分类Dev

在窗体控件上禁用某些TabIndex值?

来自分类Dev

Rails 4:嵌套属性未显示在窗体上

来自分类Dev

Bootstrap 5水平和垂直中心在窗体上

来自分类Dev

Form.Show()不在窗体上设置焦点

来自分类Dev

在窗体上创建立即窗口样式日志

来自分类Dev

如何在窗体控件(dockPanels)上重新加载焦点

来自分类Dev

在窗体上移动按钮时发生Delphi访问冲突

来自分类Dev

控件突然消失在窗体设计器上

来自分类Dev

重置放置在窗体上的用户控件

Related 相关文章

  1. 1

    在窗体上的控件中创建值

  2. 2

    如何从放置在窗体上的面板中捕获值

  3. 3

    #名称?在Access 2010中重新查询后在窗体上

  4. 4

    在窗口内绘制Windows窗体

  5. 5

    在窗口内绘制Windows窗体

  6. 6

    Windows窗体图形未绘制

  7. 7

    在Windows窗体中循环遍历ArrayList并在窗体上显示

  8. 8

    在Windows窗体中循环遍历ArrayList并在窗体上显示

  9. 9

    当从另一个窗体触发按钮单击事件时,在窗体的面板中绘制一个矩形

  10. 10

    在窗口调整大小之前,ChartJS不会在引导选项卡内绘制图形

  11. 11

    始终在窗体上启用角度按钮

  12. 12

    单选按钮在窗体上的位置

  13. 13

    根据字段值在窗体上的addError

  14. 14

    如何在窗体(Dynamics ax)上的UTCDatetime字段中删除时钟符号?

  15. 15

    在窗体显示事件中启动任务

  16. 16

    为什么在窗体显示事件之前触发Windows窗体控件单击事件?

  17. 17

    如何在R中的图形上绘制多个类别变量?

  18. 18

    在SageMath中的图形的顶点上绘制非注入标签

  19. 19

    WPF中drawcontext绘制的几何图形上的阴影

  20. 20

    将TMemo放在窗体上后,TMainMenu图标消失

  21. 21

    在窗体控件上禁用某些TabIndex值?

  22. 22

    Rails 4:嵌套属性未显示在窗体上

  23. 23

    Bootstrap 5水平和垂直中心在窗体上

  24. 24

    Form.Show()不在窗体上设置焦点

  25. 25

    在窗体上创建立即窗口样式日志

  26. 26

    如何在窗体控件(dockPanels)上重新加载焦点

  27. 27

    在窗体上移动按钮时发生Delphi访问冲突

  28. 28

    控件突然消失在窗体设计器上

  29. 29

    重置放置在窗体上的用户控件

热门标签

归档