将屏幕捕获(Bitblt)存储在内存缓冲区中以通过IdTCPClient发送

时间:2009-08-10 18:59:06

标签: graphics tcp c++builder indy c++builder-6

在windows vista上的c ++ builder 6中

Graphics:: TBitmap * bmpscreencapture = new Graphics::TBitmap;
bmpscreencapture-> Height = Screen-> Height;
bmpscreencapture-> Width = Screen-> Width;
HDC ScreenSrc = GetWindowDC (0);
BitBlt (bmpscreencapture-> Canvas-> Handle, 0, 0, Screen-> Width,
Screen-> Height, ScreenSrc, 0, 0, SRCCOPY);
Canvas->Draw(10, 10, bmpscreencapture);
ReleaseDC (GetDesktopWindow (), ScreenSrc);
delete bmpscreencapture;

我目前有一段代码用于捕获屏幕并将屏幕捕获显示在空表单上。我想要做的是将捕获的图像存储到内存缓冲区,然后使用indy客户端IdTCPClient通过互联网发送此缓冲区,使用indy服务器IDTCPServer接收类似的程序。

有没有人有任何关于如何实现这一目标的建议/想法?我是图形编程的新手

1 个答案:

答案 0 :(得分:2)

使用TBitmap :: SaveToStream()方法将数据保存到TStream,例如TMemoryStream。然后将TStream传递给Indy的TIdTCPConnection :: WriteStream()(Indy 9及更早版本)或TIdIOHandler :: Write(TStream)(Indy 10)方法。在接收端,您可以使用TIdTCPConnection / TIdIOHandler :: ReadStream()方法将数据读入TStream,然后将TStream传递给TBitmap :: LoadFromStream()方法。