0

我创建了一个应用程序,我需要通过套接字发送图像的裁剪部分。我已经使用 StretchBlt() 裁剪了图像,我还能够将裁剪后的图像显示并保存到位图文件中。

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

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

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

4

2 回答 2

4

您不能将 HBITMAP(它是 HANDLE,内存中的引用指针)传递给另一台机器。您可以使用GetBitmapBits 函数将 HBITMAP 转换为字节数组,并使用 send() 发送此字节数组。

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

于 2011-05-16T07:05:46.613 回答
2

通常发送原始内存是个坏主意——即使你保证今天另一端总是有一台 Windows 机器,但它对未来不是很灵活——如果你想换一个不同的平台怎么办,甚至开始使用.NET 在普通的 win32 上?

我建议做的是将裁剪后的图像保存到 .bmp 文件中,然后像任何其他文件一样通过套接字发送文件。这样你就可以最大限度地灵活地做你正在做的事情。

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

http://pastebin.com/gLw7ykMU

希望这可以帮助!

于 2011-05-16T07:00:28.360 回答