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
[4966] Re:[질문] bitmap->loadfromstream에서요..
한꼬맹이 [] 3332 읽음    2001-01-19 18:43
Fenrir 님이 쓰신 글 :
: 바탕화면을 캡쳐해서 뿌려주는 프로그램 소스거든요?
:
: void __fastcall TForm1::BitBtn1Click(TObject *Sender)
: {
: // 캡쳐
: HDC DeskTopDC;
: Graphics::TBitmap *tmpBitmap = new Graphics::TBitmap();
: TMemoryStream *tmpImage = new TMemoryStream();
: DeskTopDC = GetWindowDC(GetDesktopWindow());
: tmpBitmap->Handle = CreateCompatibleBitmap(DeskTopDC,
: Screen->Width, Screen->Height);
: BitBlt(tmpBitmap->Canvas->Handle,0,0,Screen->Width,
: Screen->Height,DeskTopDC,0,0,SRCCOPY);
:
: tmpBitmap->SaveToFile("C:\\bitmap.bmp");
: tmpImage->LoadFromFile("C:\\bitmap.bmp");
:
: //화면출력
: Image1->Picture->Bitmap->LoadFromStream(tmpImage);
:
: DeleteObject(tmpBitmap->Handle);
: delete tmpBitmap;
: ReleaseDC(0, DeskTopDC);
: }
:
: 이렇게 하면 캡쳐되서 뿌려지긴 하는데
: 파일로 저장하지 않고 비트맵을 스트림으로 저장한 다음
: Image1->Picture->Bitmap->LoadFromStream(스트림); 이런식으로
: 불러올수는 없나요? 다음처럼요..
:
: void __fastcall TForm1::BitBtn1Click(TObject *Sender)
: {
: // 캡쳐
: HDC DeskTopDC;
: Graphics::TBitmap *tmpBitmap = new Graphics::TBitmap();
: TMemoryStream *tmpImage = new TMemoryStream();
: DeskTopDC = GetWindowDC(GetDesktopWindow());
: tmpBitmap->Handle = CreateCompatibleBitmap(DeskTopDC,
: Screen->Width, Screen->Height);
: BitBlt(tmpBitmap->Canvas->Handle,0,0,Screen->Width,
: Screen->Height,DeskTopDC,0,0,SRCCOPY);
:
: tmpBitmap->SaveToStream(tmpImage); // 바뀐부분
:
: //화면출력
: Image1->Picture->Bitmap->LoadFromStream(tmpImage);
:
: DeleteObject(tmpBitmap->Handle);
: delete tmpBitmap;
: ReleaseDC(0, DeskTopDC);
: }
:
: 원래 만들려는 프로그램이 클라이언트에서 바탕화면을 캡쳐해서
: 서버로 보내고 서버에서 보여주는 프로그램이거든요...
: 근데 문제가 첫번째 소스처럼 일단 파일로 저장한다음에
: 보내면 문제없이 서버에서 보여지는데..
: 두번째 처럼 스트림으로 바로 보내버리면
: invalid bitmap이라면서 보여주질 못하더라구요..
: 그렇다고 파일로 저장하고 보내자니 저장하는 시간이 아깝고..
:
: 답변을 바랍니다..
: 행복하시길~
:
:

안녕하십니까?

한꼬맹이입니다.

한가지 실수를 하신것 같군요.. 스트림은 읽어올 위치를 세팅해 주셔야 합니다.

//---------------------------------------------------
tmpBitmap->SaveToStream(tmpImage); // 바뀐부분

이줄에 "tmpImage->Position = 0;"을 추가 하세요..

//화면출력
Image1->Picture->Bitmap->LoadFromStream(tmpImage);
//-----------------------------------------------------

그럼 도움되시길...

+ -

관련 글 리스트
4961 [질문] bitmap->loadfromstream에서요.. Fenrir 3609 2001/01/19
4966     Re:[질문] bitmap->loadfromstream에서요.. 한꼬맹이 3332 2001/01/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.