【问题标题】:Crop image from X and Y?从 X 和 Y 裁剪图像?
【发布时间】:2018-12-11 16:38:37
【问题描述】:
var ssbytearray = ((ITakesScreenshot)excelSession).GetScreenshot().AsByteArray;
var screenshot = new Bitmap(new MemoryStream(ssbytearray));
var croppedScreenshot = new Rectangle(element.Location.X, element.Location.Y, element.Size.Width, element.Size.Height);
screenshot = screenshot.Clone(croppedScreenshot, screenshot.PixelFormat);

SaveScreenShot(saveLocation, screenshot);

在我的代码中,我目前正在截取我称为“元素”的 Microsoft Office 应用程序的屏幕截图,并将图像按原样保存。不幸的是,如果我想从顶部或左侧裁剪图像,这并不像在创建矩形时用数字替换 X 和 Y 坐标那么容易。如果我尝试用某个值更改 X 或 Y 坐标,我会得到 SystemOutOfMemory 异常。但是,如果我想从宽度和高度裁剪它并尝试更改我能够更改的值。

我希望能够裁剪从顶部和左侧截取的屏幕截图。目前我只能使用宽度和高度从底部或右侧裁剪屏幕截图。

任何帮助表示赞赏。

【问题讨论】:

  • 为什么不选择更好的元素呢?如果您选择一个元素然后必须裁剪,似乎会有一个更好的元素只包含您关心的项目。找到该元素并将其传递给您的屏幕截图功能...问题已解决。
  • 我需要在 Excel 中截取加载项窗格以及单元格本身,因此为什么需要裁剪。如果有更好的方法我可以做到这一点,请随时详细说明。

标签: c# exception screenshot rectangles


【解决方案1】:

我通过在创建矩形时更改 x、y、高度和宽度值解决了这个问题。如果您创建 Rectangle 的值大于您尝试捕获的元素,它将产生 System.OutOfMemory 异常。

但是,这会在更改分辨率时引起问题。目前正在尝试解决该问题。

编辑:为了解决我遇到的第二个问题,我在测试运行之前和之后更改了系统的分辨率,以便它可以在大多数系统上常见的分辨率上运行,然后将其改回原来的。

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 2023-04-04
    • 2013-05-14
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    相关资源
    最近更新 更多