|
// ................ msg에 이미지 데이터를 넣은 후
// ....... msg 의 데이터를 bm->Canvas 에 넣은 후
라고 적은부분이 관건인데요..
내용이 없으니 뭐라 할말도 없네요.
msg에 이미지 데이터를 넣는게 중요합니다. 포인터를 때려넣지말고 포인터가 가르키는 데이터를 잘 넣어보세요.
아래는 내 컴퓨터화면을 캡쳐해서 JPG로 압축해서 전송하는데 아무런 문제없는 함수입니다.
직접 테스트 해보고 잘 되는거 확인했으니... 이렇게하면 될껍니다.
//---------------------------------------------------------------------------
void __fastcall TForm1::DesktopSend()
{
RECT DesktopRect;
GetWindowRect( GetDesktopWindow(), &DesktopRect );
Graphics::TBitmap *my_screen = new Graphics::TBitmap();
my_screen->Width = 80;
my_screen->Height= 60;
StretchBlt ( my_screen->Canvas->Handle, 0, 0, 80, 60, ::GetDC(::GetDesktopWindow()), 0, 0, DesktopRect.right, DesktopRect.bottom, SRCCOPY );
TMemoryStream *m = new TMemoryStream();
TJPEGImage *m_JpegImage = new TJPEGImage();
//BMP -> JPEG
m_JpegImage->Assign(my_screen);
m_JpegImage->CompressionQuality = 50;
m_JpegImage->SaveToStream(m);
// SEND JPEG STREAM
struct basic_struct mystruct;
mystruct.cmd = MSG_SCREEN;
int buff_size = sizeof(mystruct) + m->Size;
mystruct.size = buff_size;
void *Buff = malloc( buff_size );
memcpy ( Buff, &mystruct, sizeof(mystruct) );
memcpy ( (((char *)Buff) + sizeof(basic_struct)), m->Memory, m->Size );
TForm1->CSclientMessageSender((char *)Buff, buff_size);
free ( Buff );
delete m;
delete my_screen;
delete m_JpegImage;
}
//---------------------------------------------------------------------------
딴나라당 타도를 위해... 적은 글입니다.
|