|
도무지 어떻게 해야할지를 모르겠습니다.
400x300 크기인데.... 그냥 TImage 와 TServerSocket 을 사용하면....
이미지중의 위의 부분만 조금 전송되고 나머지는 검은화면이나 노이즈로 채워집니다.
(데이터가 제대로 들어오는지도 모르겠네요)
전송에 문제가 있는듯 한데요.
// 보내는 쪽
unsigned char msg[SCREEN_WIDTH * SCREEN_HEIGHT * 3];
// 헤더부터 보냅니다.
DataHeader dh;
dh.Type = IMAGE;
dh.Size = SCREEN_WIDTH * SCREEN_HEIGHT * 3;
ClientSocket->Socket->SendBuf( &dh, sizeof(DataHeader) );
// ................ msg에 이미지 데이터를 넣은 후
ClientSocket->Socket->SendBuf( msg, dh.Size );
이렇게 보냈습니다.
// 받는 쪽
// 헤더를 먼저 받은 후
case IMAGE:
Graphics::TBitmap *bm = new Graphics::TBitmap();
bm->SetSize( SCREEN_WIDTH, SCREEN_HEIGHT );
Socket->ReceiveBuf( msg, dh.Size );
// ....... msg 의 데이터를 bm->Canvas 에 넣은 후
StretchBlt( ScreenForm->ScreenImage->Canvas->Handle, 0, 0, 400, 300, bm->Canvas->Handle, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, SRCCOPY );
ScreenForm->ScreenImage->Refresh();
이렇게 받았습니다.
ScreenForm->ScreenImage 에서 이미지를 확인하면 위의 대충 10줄 미만으로 살짝 보이고...
나머지는 검은색에 약간의 노이즈가 섞입니다.
정말 웃긴건 받는 쪽에서
memset( msg, 0, dh.Size );
Socket->ReceiveBuf( msg, dh.Size );
이렇게 메세지를 받기 전에 0으로 초기화하면 이미지가 전혀 안보인다는겁니다.
분명이 코드상으로는 초기화한후에 이미지를 받는데도 말이죠... 쓰레드때문에 그런걸까요?
아.... 이런걸로 시간이 걸릴지는 모르겠네요.
지금 이미지 전송 때문에 엄청나게 오래 걸리고 있습니다. 몇일 계속 끙끙대고 있네요.
제발 답변 좀 부탁드립니다.
|