全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1984
推到 Plurk!
推到 Facebook!

轉jpeg和savetostream的問題???

答題得分者是:RaynorPao
wun
一般會員


發表:19
回覆:20
積分:7
註冊:2002-08-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-20 23:08:20 IP:203.203.xxx.xxx 未訂閱
void __fastcall TForm1::Timer1Timer(TObject *Sender) { HDC dc; TMemoryStream *BmpStream ; TJPEGImage *jp = new TJPEGImage(); Graphics::TCanvas *ScreenCanvas = new Graphics::TCanvas TRect rect; BmpStream = new TMemoryStream(); dc = GetDC(0); ScreenCanvas->Handle = Form1->dc; Image1->Picture->Bitmap->Width = Screen->Width; Image1->Picture->Bitmap->Height= Screen->Height; rect = Rect(0,0,Screen->Width, Screen->Height); Image1->Picture->Bitmap->Canvas->CopyRect(Form1->rect, Form1- >ScreenCanvas, Form1->rect); jp->CompressionQuality = 20; // 設定圖像解析度(檔案大小) jp->Assign(Form1->Image1->Picture->Bitmap); jp->SaveToStream(BmpStream); } 這是我寫的一段程式...是要Timer每三秒在client抓取螢幕的畫面然後存成Stream(savetostream)然後再傳server端,但是為什麼每次在client抓圖,轉成jpeg和savetostream的時候..電腦都會發生Delay的現象..滑鼠都會有delay的現象.這是為什麼呢??是在轉jpeg的時候還是在savetostream的時候出了問題呢...有沒有辨法避免這種Delay的現象呢????謝謝大家...
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-21 08:30:05 IP:203.73.xxx.xxx 未訂閱
引言: void __fastcall TForm1::Timer1Timer(TObject *Sender) { HDC dc; TMemoryStream *BmpStream ; TJPEGImage *jp = new TJPEGImage(); Graphics::TCanvas *ScreenCanvas = new Graphics::TCanvas TRect rect; BmpStream = new TMemoryStream(); dc = GetDC(0); ScreenCanvas->Handle = Form1->dc; Image1->Picture->Bitmap->Width = Screen->Width; Image1->Picture->Bitmap->Height= Screen->Height; rect = Rect(0,0,Screen->Width, Screen->Height); Image1->Picture->Bitmap->Canvas->CopyRect(Form1->rect, Form1- >ScreenCanvas, Form1->rect); jp->CompressionQuality = 20; // 設定圖像解析度(檔案大小) jp->Assign(Form1->Image1->Picture->Bitmap); jp->SaveToStream(BmpStream); } 這是我寫的一段程式...是要Timer每三秒在client抓取螢幕的畫面然後存成Stream(savetostream)然後再傳server端,但是為什麼每次在client抓圖,轉成jpeg和savetostream的時候..電腦都會發生Delay的現象..滑鼠都會有delay的現象.這是為什麼呢??是在轉jpeg的時候還是在savetostream的時候出了問題呢...有沒有辨法避免這種Delay的現象呢????謝謝大家...
wun 你好: (1)請問你的電腦的配備?? CPU?? RAM?? VGA?? (2)請問你是在 PC 還是在 NoteBook 會發生這種情況?? (3)請問你的 Mouse 是傳統 PS2 還是 USB 介面?? --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wun
一般會員


發表:19
回覆:20
積分:7
註冊:2002-08-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-21 10:12:24 IP:203.203.xxx.xxx 未訂閱
引言:
引言: void __fastcall TForm1::Timer1Timer(TObject *Sender) { HDC dc; TMemoryStream *BmpStream ; TJPEGImage *jp = new TJPEGImage(); Graphics::TCanvas *ScreenCanvas = new Graphics::TCanvas TRect rect; BmpStream = new TMemoryStream(); dc = GetDC(0); ScreenCanvas->Handle = Form1->dc; Image1->Picture->Bitmap->Width = Screen->Width; Image1->Picture->Bitmap->Height= Screen->Height; rect = Rect(0,0,Screen->Width, Screen->Height); Image1->Picture->Bitmap->Canvas->CopyRect(Form1->rect, Form1- >ScreenCanvas, Form1->rect); jp->CompressionQuality = 20; // 設定圖像解析度(檔案大小) jp->Assign(Form1->Image1->Picture->Bitmap); jp->SaveToStream(BmpStream); } 這是我寫的一段程式...是要Timer每三秒在client抓取螢幕的畫面然後存成Stream(savetostream)然後再傳server端,但是為什麼每次在client抓圖,轉成jpeg和savetostream的時候..電腦都會發生Delay的現象..滑鼠都會有delay的現象.這是為什麼呢??是在轉jpeg的時候還是在savetostream的時候出了問題呢...有沒有辨法避免這種Delay的現象呢????謝謝大家...
wun 你好: (1)請問你的電腦的配備?? CPU?? RAM?? VGA?? (2)請問你是在 PC 還是在 NoteBook 會發生這種情況?? (3)請問你的 Mouse 是傳統 PS2 還是 USB 介面?? -- >< face="Verdana, Arial, Helvetica"> 真得很謝謝您~~~ (1)cpu:AMD XP 1.4G,RAM DDR 256M , VGA TNT2 (2)我是在pc試的 (3)Mouse是PS2的 謝謝....
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-21 11:02:58 IP:203.73.xxx.xxx 未訂閱
引言: 真得很謝謝您~~~ (1)cpu:AMD XP 1.4G,RAM DDR 256M , VGA TNT2 (2)我是在pc試的 (3)Mouse是PS2的 謝謝....
wun 你好: 我是利用以下的程式碼做測試的 < class="code"> void __fastcall TForm1::Timer1Timer(TObject *Sender) { HDC dc; TMemoryStream *ms=new TMemoryStream; TJPEGImage *jpg=new TJPEGImage(); Graphics::TBitmap *bmp=new Graphics::TBitmap; TCanvas *cs=new TCanvas; dc=GetDC(0); cs->Handle=dc; bmp->Width=Screen->Width; bmp->Height=Screen->Height; bmp->Canvas->CopyRect(Rect(0, 0, bmp->Width, bmp->Height), cs, Rect(0, 0, Screen->Width, Screen->Height)); jpg->CompressionQuality=20; jpg->Assign(bmp); int tickcount=GetTickCount(); jpg->SaveToStream(ms); int elapsedtime=GetTickCount()-tickcount; Label1->Caption=IntToStr(elapsedtime); delete cs; ReleaseDC(NULL, dc); delete bmp; delete jpg; delete ms; } 備註: (1)Timer1 的 Interval 同樣設為 3000(3 seconds) (2)在我的 NoteBook 上會造成 Delay 的現象(P3-1G, 256 MB, USB Mouse, VGA-S3-8MB) (3)在我的 PC 上卻不會造成 Delay 的現象(AMD-1.4G, 512 MB, PS2 Mouse, VGA-AGP4X-64MB) --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wun
一般會員


發表:19
回覆:20
積分:7
註冊:2002-08-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-21 23:11:19 IP:203.203.xxx.xxx 未訂閱
引言:
引言: 真得很謝謝您~~~ (1)cpu:AMD XP 1.4G,RAM DDR 256M , VGA TNT2 (2)我是在pc試的 (3)Mouse是PS2的 謝謝....
wun 你好: 我是利用以下的程式碼做測試的 < class="code"> void __fastcall TForm1::Timer1Timer(TObject *Sender) { HDC dc; TMemoryStream *ms=new TMemoryStream; TJPEGImage *jpg=new TJPEGImage(); Graphics::TBitmap *bmp=new Graphics::TBitmap; TCanvas *cs=new TCanvas; dc=GetDC(0); cs->Handle=dc; bmp->Width=Screen->Width; bmp->Height=Screen->Height; bmp->Canvas->CopyRect(Rect(0, 0, bmp->Width, bmp->Height), cs, Rect(0, 0, Screen->Width, Screen->Height)); jpg->CompressionQuality=20; jpg->Assign(bmp); int tickcount=GetTickCount(); jpg->SaveToStream(ms); int elapsedtime=GetTickCount()-tickcount; Label1->Caption=IntToStr(elapsedtime); delete cs; ReleaseDC(NULL, dc); delete bmp; delete jpg; delete ms; } 備註: (1)Timer1 的 Interval 同樣設為 3000(3 seconds) (2)在我的 NoteBook 上會造成 Delay 的現象(P3-1G, 256 MB, USB Mouse, VGA-S3-8MB) (3)在我的 PC 上卻不會造成 Delay 的現象(AMD-1.4G, 512 MB, PS2 Mouse, VGA-AGP4X-64MB) -- >< face="Verdana, Arial, Helvetica"> 真得很謝謝您..我試了這個程式..還是會delay...我想會不會是memory的大小 的關係呢???...還有就是想請問一下GetTickCount()是什麼意思呢???謝謝... 有人回覆我..說先把它切割再save..可是要如何切呢...謝謝..
kevintam
一般會員


發表:7
回覆:11
積分:3
註冊:2003-02-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-24 04:32:28 IP:211.74.xxx.xxx 未訂閱
引言: 恕刪 真得很謝謝您..我試了這個程式..還是會delay...我想會不會是memory的大小 的關係呢???...還有就是想請問一下GetTickCount()是什麼意思呢???謝謝... 有人回覆我..說先把它切割再save..可是要如何切呢...謝謝..
小黑... 我們抓圖程式改一下可以引用包子哥的程式可以抓到mouse移動的動作,你在截取的程式改一下。以下是包子哥的撰寫的程式。 void __fastcall TForm1::Button2Click(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); bmpBuf->SaveToFile("C:\\bmpBuf.bmp"); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 這部份改我們傳輸的時間檔名 delete bmpBuf; } 引用程式文章於http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25742 感謝Delphi K.Top大大們的指導 發表人 - kevintam 於 2003/02/24 04:34:56
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-02-24 08:35:06 IP:203.73.xxx.xxx 未訂閱
引言: 還有就是想請問一下GetTickCount()是什麼意思呢???
wun 你好: 那兩行 GetTickCount() 的目的,是在計算 jpg->SaveToStream(ms); 這一行~~總共花費了多久的時間 (milliseconds) 至於詳細的說明,建議你自己參考
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wun
一般會員


發表:19
回覆:20
積分:7
註冊:2002-08-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-02-25 00:09:08 IP:203.203.xxx.xxx 未訂閱
真得很謝謝RaynorPao大大的教導.. 還有一個問題想請教一下RaynorPao大大.. 一張圖分割好了後..要如何存才能把它存回一個完整的圖片呢....謝謝 以下是分割的程式 void __fastcall TForm1::Button1Click(TObject *Sender) { Graphics :: TBitmap * tmpimg =new Graphics ::TBitmap(); tmpimg->Assign(Form1->Image1->Picture); TRect rect1,rect2; rect1=Rect(0,0,256,384); rect2=Rect(0*256,0*384,(0 1)*256,(0 1)*384); Image2->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image2->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(1*256,0*384,(1 1)*256,(0 1)*384); Image3->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image3->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(2*256,0*384,(2 1)*256,(0 1)*384); Image4->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image4->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(3*256,0*384,(3 1)*256,(0 1)*384); Image5->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image5->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(0*256,1*384,(0 1)*256,(1 1)*384); Image6->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image6->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(1*256,1*384,(1 1)*256,(1 1)*384); Image7->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image7->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(2*256,1*384,(2 1)*256,(1 1)*384); Image8->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image8->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(3*256,1*384,(3 1)*256,(1 1)*384); Image9->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image9->Stretch=true; } //--------------------------------------------------------------------------- 發表人 - wun 於 2003/02/25 00:10:36
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-02-25 00:24:04 IP:61.221.xxx.xxx 未訂閱
引言: 真得很謝謝RaynorPao大大的教導.. 還有一個問題想請教一下RaynorPao大大.. 一張圖分割好了後..要如何存才能把它存回一個完整的圖片呢....謝謝 以下是分割的程式 void __fastcall TForm1::Button1Click(TObject *Sender) { Graphics :: TBitmap * tmpimg =new Graphics ::TBitmap(); tmpimg->Assign(Form1->Image1->Picture); TRect rect1,rect2; rect1=Rect(0,0,256,384); rect2=Rect(0*256,0*384,(0 1)*256,(0 1)*384); Image2->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image2->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(1*256,0*384,(1 1)*256,(0 1)*384); Image3->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image3->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(2*256,0*384,(2 1)*256,(0 1)*384); Image4->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image4->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(3*256,0*384,(3 1)*256,(0 1)*384); Image5->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image5->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(0*256,1*384,(0 1)*256,(1 1)*384); Image6->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image6->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(1*256,1*384,(1 1)*256,(1 1)*384); Image7->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image7->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(2*256,1*384,(2 1)*256,(1 1)*384); Image8->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image8->Stretch=true; rect1=Rect(0,0,256,384); rect2=Rect(3*256,1*384,(3 1)*256,(1 1)*384); Image9->Canvas->CopyRect(rect1,tmpimg->Canvas,rect2); Image9->Stretch=true; } //---------------------------------------------------------------------------
wun 你好: 一樣啊~~處理完以後,再把所有的圖貼到一個大圖裡面就可以啦
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wun
一般會員


發表:19
回覆:20
積分:7
註冊:2002-08-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-02-25 01:39:15 IP:203.203.xxx.xxx 未訂閱
謝謝RaynorPao的回答.. 我這裡現在最大的問題就是把一張圖savetostream時會delay... 這樣會使被監控者感到疑惑...有人說可以用thread的方式.. 可是我試過..好像沒用..不知道RaynorPao大大對於這點可否給 我一些意見和方法.....謝謝您
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-02-25 08:35:15 IP:203.73.xxx.xxx 未訂閱
引言: 謝謝RaynorPao的回答.. 我這裡現在最大的問題就是把一張圖savetostream時會delay... 這樣會使被監控者感到疑惑...有人說可以用thread的方式.. 可是我試過..好像沒用..不知道RaynorPao大大對於這點可否給 我一些意見和方法.....謝謝您
wun 你好: 既然你已經試過 Thread 了 那也就順便試試利用 Win32 API SetPriorityClass 改變每個 Thread 的 Priority~~看看會不會有所改善呢?? > --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wun
一般會員


發表:19
回覆:20
積分:7
註冊:2002-08-24

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-02-26 23:45:04 IP:203.203.xxx.xxx 未訂閱
謝謝RaynorPao大大.. 我想在請問一下..有沒有一種可以可記憶體全釋放...或把CPU時間全部free.. 因為我作過實驗...如果是單純把一張Image圖片直接savetostream就不會delay 如果加了抓圖就會delay..我在想是不是因為記憶體不足或是CPU時間被占住了才會這樣呢...謝謝...
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-03-04 10:05:50 IP:203.73.xxx.xxx 未訂閱
引言: 謝謝RaynorPao大大.. 我想在請問一下..有沒有一種可以可記憶體全釋放...或把CPU時間全部free.. 因為我作過實驗...如果是單純把一張Image圖片直接savetostream就不會delay 如果加了抓圖就會delay..我在想是不是因為記憶體不足或是CPU時間被占住了才會這樣呢...謝謝...
wun 你好: (1)你的問題我已經想了很久,似乎還想不到一個比較好的解決方式 (2)以下的做法你先試試看,我並沒有實際做過,不確定是否可行?? (3)把原來使用的 JPEG 元件,試著改成 GIF,看看情況會不會改善?? (4)BCB default 是不 support GIF 的,因此你要先安裝這個元件才能使用 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=12363 http://www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_20151437.html -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/03/05 12:40:19
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
wun
一般會員


發表:19
回覆:20
積分:7
註冊:2002-08-24

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-03-04 10:38:20 IP:203.203.xxx.xxx 未訂閱
引言:
引言: 謝謝RaynorPao大大.. 我想在請問一下..有沒有一種可以可記憶體全釋放...或把CPU時間全部free.. 因為我作過實驗...如果是單純把一張Image圖片直接savetostream就不會delay 如果加了抓圖就會delay..我在想是不是因為記憶體不足或是CPU時間被占住了才會這樣呢...謝謝...
wun 你好: (1)你的問題我已經想了很久,似乎還想不到一個比較好的解決方式 (2)以下的做法你先試試看,我並沒有實際做過,不確定是否可行?? (3)把原來使用的 JPEG 元件,試著改成 GIF,看看情況會不會改善?? (4)BCB default 是不 support GIF 的,因此你要先安裝這個元件才能使用 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=12363 -- Enjoy Researching & Developing --
真得很謝謝您....那元件裝好後就可以直接使用了嗎??? 要不要include些什麼啊..謝謝...
系統時間:2024-04-20 22:26:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!