如何使用WIN32和C ++在套接字上发送HBITMAP?

时间:2011-05-16 06:45:05

标签: c++ winapi visual-c++ bitmapimage

我创建了一个应用程序,我需要通过Socket发送图像的裁剪部分。我使用StretchBlt()裁剪了图像,我还可以显示裁剪后的图像并将其保存到位图文件中。

接下来,我想通过Socket连接发送这个cropepd图像。建立套接字之间的连接,我的问题是如何通过Socket发送/接收此图像,因为send()和recv()函数需要char *。

一个想法是,如果我选择HBITMAP到memDC对象,而不是将memDC直接发送到远程套接字?

任何更简单的方法来完成这项任务?

2 个答案:

答案 0 :(得分:4)

您无法将HBITMAP(HANDLE,内存中的引用指针)传递给另一台计算机。您可以使用GetBitmapBits Function将HBITMAP转换为字节数组,并使用send()发送此字节数组。

另一方面,您必须创建另一个兼容的位图,并在recv()之后使用SetBitmapBits Function

答案 1 :(得分:2)

一般情况下发送原始内存是一个坏主意 - 即使你保证今天在另一端总是有一台Windows机器,它对未来也不是很灵活 - 如果你想换到另一个平台怎么办,或者甚至开始使用.NET而不是普通的win32?

我建议做的是将裁剪后的图像保存到.bmp文件中,然后像其他任何文件一样通过套接字发送文件。这样,您就可以获得最大的灵活性。

不幸的是,如果您正在使用C ++ / win32输出位图是一个噩梦。这是输出一个位图的代码,我根据一些来源将它们拼凑在一起 - 它使用了我们的一些类成员,但你应该能够弄清楚如何在那里插入正确的值。

http://pastebin.com/gLw7ykMU

希望这有帮助!

相关问题