畫面會一閃一閃的 |
答題得分者是:RaynorPao
|
jacky_chan
一般會員 發表:7 回覆:14 積分:4 註冊:2003-05-29 發送簡訊給我 |
各位大大您好:
這是延續之前做的程式所存在的問題,在 client 端的畫面會有閃動的情況發生,如果 timer 設得更小 (100) ,閃動的情況會更嚴重,不知有什麼方法能改善這種情形 以下是程式碼
謝謝各位大大
< class="code">
// server端
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Graphics::TBitmap *bmpBuf;
HDC hdc;
int x,y;
HCURSOR hCur;
ICONINFO IconInfo;
POINT pt; hdc=::GetDC(0);
x=Screen->Width;
y=Screen->Height;
bmpBuf=new Graphics::TBitmap;
bmpBuf->Handle=::CreateCompatibleBitmap(hdc, x, y);
::BitBlt(bmpBuf->Canvas->Handle, 0, 0, bmpBuf->Width, bmpBuf->Height,
hdc, 0, 0, SRCCOPY);
hCur=GetCursor();
IconInfo.fIcon=FALSE;
GetIconInfo(hCur, &IconInfo);
GetCursorPos(&pt);
pt.x-=IconInfo.xHotspot;
pt.y-=IconInfo.yHotspot;
DrawIcon(bmpBuf->Canvas->Handle, pt.x, pt.y, hCur); //轉成jpg的格式
TJPEGImage *jpg = new TJPEGImage();
jpg->PixelFormat = jf8Bit;
jpg->CompressionQuality = 10;
jpg->Assign((TPersistent*)bmpBuf);
delete bmpBuf;
jpg->Compress(); TMemoryStream *msBuf=new TMemoryStream;
jpg->SaveToStream(msBuf);
msBuf->Position=0;
NMStrm1->Host = "10.20.8.111";
NMStrm1->FromName = "10.20.8.111";
NMStrm1->PostIt(msBuf);
//NMStrm1->Disconnect();
msBuf->Clear();
delete jpg;
delete msBuf;
}
//----------------------------------------------------- client端
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrmServ1MSG(TComponent *Sender,
const AnsiString sFrom, TStream *strm)
{
char *buffer = new char[strm->Size 1];
strm->ReadBuffer(buffer,strm->Size);
TMemoryStream *ms=new TMemoryStream;
ms->Write(buffer,strm->Size 1);
ms->Position=0; TJPEGImage *jpg = new TJPEGImage () ;
jpg->LoadFromStream(ms) ;
Image1->Picture->Bitmap->Assign(jpg);
delete jpg ;
Refresh();
ms->Clear();
}
//-----------------------------------------------------
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 各位大大您好: 這是延續之前做的程式所存在的問題,在 client 端的畫面會有閃動的情況發生,如果 timer 設得更小 (100) ,閃動的情況會更嚴重,不知有什麼方法能改善這種情形 以下是程式碼 謝謝各位大大 < class="code"> // server端 void __fastcall TForm1::Timer1Timer(TObject *Sender) { Graphics::TBitmap *bmpBuf; HDC hdc; int x,y; HCURSOR hCur; ICONINFO IconInfo; POINT pt; hdc=::GetDC(0); x=Screen->Width; y=Screen->Height; bmpBuf=new Graphics::TBitmap; bmpBuf->Handle=::CreateCompatibleBitmap(hdc, x, y); ::BitBlt(bmpBuf->Canvas->Handle, 0, 0, bmpBuf->Width, bmpBuf->Height, hdc, 0, 0, SRCCOPY); hCur=GetCursor(); IconInfo.fIcon=FALSE; GetIconInfo(hCur, &IconInfo); GetCursorPos(&pt); pt.x-=IconInfo.xHotspot; pt.y-=IconInfo.yHotspot; DrawIcon(bmpBuf->Canvas->Handle, pt.x, pt.y, hCur); //轉成jpg的格式 TJPEGImage *jpg = new TJPEGImage(); jpg->PixelFormat = jf8Bit; jpg->CompressionQuality = 10; jpg->Assign((TPersistent*)bmpBuf); delete bmpBuf; jpg->Compress(); TMemoryStream *msBuf=new TMemoryStream; jpg->SaveToStream(msBuf); msBuf->Position=0; NMStrm1->Host = "10.20.8.111"; NMStrm1->FromName = "10.20.8.111"; NMStrm1->PostIt(msBuf); //NMStrm1->Disconnect(); msBuf->Clear(); delete jpg; delete msBuf; } //----------------------------------------------------- client端 //--------------------------------------------------------------------------- void __fastcall TForm1::NMStrmServ1MSG(TComponent *Sender, const AnsiString sFrom, TStream *strm) { char *buffer = new char[strm->Size 1]; strm->ReadBuffer(buffer,strm->Size); TMemoryStream *ms=new TMemoryStream; ms->Write(buffer,strm->Size 1); ms->Position=0; TJPEGImage *jpg = new TJPEGImage () ; jpg->LoadFromStream(ms) ; Image1->Picture->Bitmap->Assign(jpg); delete jpg ; Refresh(); ms->Clear(); } //-----------------------------------------------------jacky_chan 你好: 試試~~如果你的 Image1 是貼在 Form1 上的話,請加入以下這一行程式碼 Form1->DoubleBuffered=true; 如果你的 Image1 是貼在 Panel1 上的話,請加入以下這一行程式碼 Panel1->DoubleBuffered=true; -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
jacky_chan
一般會員 發表:7 回覆:14 積分:4 註冊:2003-05-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |