Сохраните снимок экрана (Bitblt) в буфере памяти для отправки через IdTCPClient - PullRequest
0 голосов
/ 10 августа 2009

В C ++ Builder 6 на Windows Vista ...

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 Ответ

2 голосов
/ 12 августа 2009

Используйте метод TBitmap :: SaveToStream () для сохранения данных в TStream, таком как TMemoryStream. Затем передайте TStream в метод TIdTCPConnection :: WriteStream () (Indy 9 и более ранние версии) в Indy или метод TIdIOHandler :: Write (TStream) (Indy 10). На приемном конце вы можете использовать метод TIdTCPConnection / TIdIOHandler :: ReadStream () для чтения данных в TStream, а затем передать TStream методу TBitmap :: LoadFromStream ().

...