【问题标题】:Image won't replace while the program is running程序运行时图像不会替换
【发布时间】:2014-02-06 08:18:31
【问题描述】:

我正在做一个屏幕共享程序,程序流程是这样的:

  1. 截屏
  2. 切片为 9
  3. 比较新切片和旧切片
  4. 替换不同的切片
  5. 上传到网络(带有新切片)

但是我在替换切片时遇到了一些问题(在替换功能中)。从我搜索过的所有来源中,我需要将位图图像(切片)转换为字符串,然后我可以替换。但是没有将位图双精度数组转换为字符串的示例。

是否有可能在不将其转换为字符串的情况下替换图像?

【问题讨论】:

  • iframe 是关于什么的?我已经删除了。
  • 实际上我自己删除了它,但不知何故没有任何变化。我试图把我的代码放在那里。对不起,我是新来的,感谢您编辑它:)

标签: c# replace bitmapimage image-comparison


【解决方案1】:

为什么需要使用 string 作为中间体来替换位图数据?您可以很好地使用位图操作功能。另外,我无法理解您的算法。您将获得整个屏幕的位图。然后你把它切成 9 个部分(那些是角、边缘和中心吗?),将每个切片与它们的旧版本一一进行比较,替换更改的部分,然后上传整个位图?您不想单独上传每个切片,只上传更改的切片吗?否则,进行切片根本没有意义,或者是吗?

现在,将数据转换为字符串确实可以让您使用字符串比较函数和其他类似的东西,但这是一个糟糕的想法。比较两个字节数组的最快方法是使用msvcrt.dll 中的memcmp 函数。这个答案为您提供了解决方案 - https://stackoverflow.com/a/2038515/3032289,包括从原始位图中读取数据。

然后,您只需发送与旧版本不同的切片即可完成,无需更换。

【讨论】:

  • 这是我的代码:dotnetfiddle.net/yB7Nlz 我不知道为什么有人从我的帖子中删除了它。无论如何,我需要将图像切成 9 个位图,以便我可以逐个比较它。因为程序的目标是尽可能少地使用带宽。这就是为什么替换只会应用于不同的切片。
  • @Eren 我还是不明白替换的来源。你想替换什么?您只需发送更改的切片,然后将它们应用到另一侧。任何其他方式只会让您发送所有内容。对方要做“组合”。
  • 已被分割成 9 的新屏幕截图的替换。
  • @Eren 好吧,您的代码效率极低,但应该可以正常工作。你有什么问题?
  • @Eren 另外,你为什么要将位图保存到文件中?如果您只是将它们发送到服务器并将它们与您存储的其他一些进行比较,为什么不直接在内存中执行所有这些操作,包括发送差异文件?
【解决方案2】:

可能最好的方法是执行Base64 encoding

Google for base64 C++ 源代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多