【问题标题】:Send HBITMAP over socket通过套接字发送 HBITMAP
【发布时间】:2014-08-10 05:44:27
【问题描述】:

我需要 C++ 中的代码,它从一侧获取 HBITMAP 并通过套接字发送它,而在另一侧接收并再次生成 HBITMAP。

必须快速有效

如果更舒服,使用 GDI+ 位图

【问题讨论】:

  • 您有将 HBITMAP 保存到文件的代码吗?如果是这样,则使用该代码并将字节流式传输到套接字而不是文件。
  • 好吧,先这样做,即获取将 HBITMAP 保存到文件的代码。然后调整fwrite 或任何用于执行send 调用的输出函数。您还需要知道如何读取文件和创建适当结构的代码。所有这些都有很好的记录,因为这是 Windows 环境中的基本位图处理。
  • 但是在那之后我如何再次进入 HBITMAP?
  • 请查看我对上述评论的编辑。基本上你所要求的与保存和读取位图文件没有什么不同。
  • 您应该序列化为流。使用可以减小尺寸的图像格式。例如 PNG 可能是合适的。然后传输该流。在另一端反序列化为图像。选择一个图像库来执行此操作。 CImg 将是一个显而易见的选择。 GDI+、WIC 也可以。有很多这样的图书馆。您可能会发现您已经有一个可用的。

标签: c++ sockets bitmap


【解决方案1】:

这样不行!

您需要使用GetObject 函数将HBITMAP 转换为BITMAP。然后通过网络序列化这个对象。注意:您需要确保正确序列化 bmBits 成员。

另一方面,一旦您反序列化了BITMAP,您就可以使用CreateBitmapIndirect 来获得HBITMAP

【讨论】:

  • 您已经描述了发送位图 header 的过程,但没有描述发送位图 data 的过程。
  • @MarkRansom - 位图数据是bmBits 结构中的bmBits 字段。
  • bmBits 仅在位图是设备无关位图时包含实际位图数据。否则需要调用GetDIBits获取实际位图数据。
猜你喜欢
  • 2014-04-29
  • 2020-03-19
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多