: 에고..
: 질문 감사드리며..
: 저의 컴에는 udp 디렉토리가 없는데...
: 말씀하신데로라면 이미지를 화일로 저정한뒤
: 이것을 읽어서 전송 하라는 뜻인것 같은데
: 전 메모리에서 직접 전송하고 싶습니다..
: 메모리에서 저장하는 방법을 구체적으로 설명
: 해 주셨으면 합니다.
:
: 제가 테스트한 프로그램의 일부 입니다.
:
: TMomoryStream *ts;
: ScreenBmp->SaveToStream(ts);
: // ScreenBmp는 캡춰된 이미지
: // TBitmap 으로 선언됨
: Graphics::TBitmap *myBmp;
: myBmp=new Graphics::TBitmap;
:
: myBmp->Width=640;
: myBmp->Height=480;
: myBmp->LoadFromStream(ts);
: // 위라인 실행후 myBmp의 Width와 Height는 0로 됨
: Image1->Picture->Bitmap=myBmp;
:
: 이렇게 했을경우 ts와 myBmp에는 이미지가
: 저장 되고 있는지 알고 싶읍니다..
:
: myBmp를 화면에 그릴려고 하면 그려지지가
: 않네요(마지막 라인). 조언을 ... 맨날 질문만 하여
: 죄송..T.T
:
:
임펠리테리입니다.
한가지 실수를 하셨는데, 스트림이란, 그냥 버퍼가 아니라, '현재위치'의 개념이 있는
객체입니다. 여기서 '현재위치'가 Position 프로퍼티로 구현됩니다.
보여주신 소스에서, 먼저 비트맵을 스트림에 저장하면 Position은 전체 Bmp의 크기만큼 뒤로
옮겨져 있는 상태가 됩니다. 이 상태에서 TBitmap::LoadFromSteam()을 하면,
현재 Position 위치에서부터 비트맵을 찾아보게 되는데, 이 위치가 전체 스트림의
끝이므로 당연히 아무것도 발견할 수 없게 되고, 결과적으로 비트맵은 텅 비게 되죠.
그래서.. 보여주신 소스를 고치면,
ScreenBmp->SaveToStream(ts);
ts->Position = 0;
Image1->Picture->Bitmap->LoadFromStream(ts);
이렇게, SaveToStream()을 하고 난 후 로드하기 전에 스트림의 Position 프로퍼티를
시작 위치로 옮겨 주어야만 합니다.
그럼 도움되시길...
|