C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[49235] 이미지 전송 팁 좀 부탁드립니다.
Hybrid [shizuka] 1165 읽음    2007-05-11 15:16
도무지 어떻게 해야할지를 모르겠습니다.

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으로 초기화하면 이미지가 전혀 안보인다는겁니다.
분명이 코드상으로는 초기화한후에 이미지를 받는데도 말이죠... 쓰레드때문에 그런걸까요?

아.... 이런걸로 시간이 걸릴지는 모르겠네요.
지금 이미지 전송 때문에 엄청나게 오래 걸리고 있습니다. 몇일 계속 끙끙대고 있네요.
제발 답변 좀 부탁드립니다.

+ -

관련 글 리스트
49235 이미지 전송 팁 좀 부탁드립니다. Hybrid 1165 2007/05/11
49258     잘해보세요. 달빛자르기 1180 2007/05/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.