|
바탕화면을 캡쳐해서 뿌려주는 프로그램 소스거든요?
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이라면서 보여주질 못하더라구요..
그렇다고 파일로 저장하고 보내자니 저장하는 시간이 아깝고..
답변을 바랍니다..
행복하시길~
|