【问题标题】:How to use Win32's BitBlt using Ruby?如何使用 Ruby 使用 Win32 的 BitBlt?
【发布时间】:2010-12-24 23:32:28
【问题描述】:

有谁知道如何在 Ruby 中使用 Win32 的 BitBlt()?似乎您需要使用目标 DC(设备上下文),而 Ruby 如何处理呢?我使用 GetPixel(),即使获得 100 个像素(大约需要 10 秒)也很慢。谢谢。

【问题讨论】:

  • 你想blit到哪里?
  • 我希望将这 100 个像素放入一个颜色数组中。就像做 GetPixel() 并将颜色放入数组一样。
  • 更新了我在 cmets 中的答案。
  • any 语言中不可能花费 10 秒来抓取 100 个像素。导致问题的原因是您正在做的其他事情。

标签: ruby winapi gdi bitblt


【解决方案1】:

二卡尔的其他帖子:使用win32截图http://github.com/jarmo/win32screenshot

【讨论】:

    【解决方案2】:

    如何将所有图像处理代码用 C++ 编写为 Win32 可执行文件并将其作为单独的进程启动,或者使用 Win32API 类从 Ruby 调用它?这样做是有意义的,而不是在 Ruby 中编写一个永远不会执行的 cludge。

    【讨论】:

    • 没关系,除非它涉及每次需要进行 BitBlt() 调用时分叉一个新进程,那么性能不会那么好。它还将涉及进程之间的某种通信以将位图传回。
    • 您不知道性能会如何,因为您还没有测试过它。这完全取决于您的使用情况。
    • 而且我没有看到程序之间的通信有问题。这是很常见的事情。
    【解决方案3】:

    我只想指出,我看到了类似的事情。 GetPixel 在 Vista 上非常慢。我已经确定,当您使用 Aero 时就是这种情况。如果您将桌面主题设置为“经典”设置之一,它又会很快。并且 OP 的约 10 秒估计没有错,信不信由你。真的是太慢了。

    我也在寻找 Ruby 中的 BitBlt。我希望我需要弄清楚/编写它,但希望其他人已经发布了一个示例。

    【讨论】:

      【解决方案4】:

      我不会像 Ed 那样走得那么远;您可能只想做一些普通 GUI 会做的相对简单和普通的事情。为此,此类库已经存在,无需编写。

      一个例子是wxRuby

      恐怕我不熟悉它,但它可能已经提供了一些抓屏实用方法。

      【讨论】:

      • 如果 Ruby 操作需要 10 秒,它一定是在做一些“普通”GUI 不会做的事情。也就是说,OP 并没有告诉我们他们实际上想要完成什么,所以谁知道呢。
      • 同意,我们只是在猜测。但是,嘿,太阳底下并没有那么多新鲜事:他想做的任何事情都可能已经完成,甚至可能在 Ruby 中,或者这是不可能的或非法的(在这种情况下,它肯定已经完成了!)。让我们看看有什么进一步的线索浮出水面! :)
      • 是的,我从未尝试在 Ruby 中进行任何严肃的图像处理,因此我更倾向于依赖 C++ 之类的东西。
      • 实际上,我前段时间尝试使用 C 的 GetPixel,它也很慢...例如,如果我得到 100 像素,我希望它立即返回,但它不会,如果我在 GetPixel 之后立即设置像素,我实际上会看到 SetPixel 一个接一个地绘制像素。所以即使使用 C,GetPixel 也很慢。
      • 到目前为止我还没有帮到你太多,是时候停止胡闹了。这里: stackoverflow.com/questions/1678890/…> 是一个类似的问题,涉及抓取整个屏幕。我怀疑引用的方法比尝试单独抓取 100 个像素要快得多。祝你好运!
      猜你喜欢
      • 2013-08-11
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2011-10-26
      • 2011-01-29
      • 2014-03-13
      相关资源
      最近更新 更多