線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1875
推到 Plurk!
推到 Facebook!

關於取得連線畫面時,貼圖閃爍的問題

答題得分者是:taishyang
robert1014
初階會員


發表:34
回覆:85
積分:43
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-08 00:31:14 IP:203.204.xxx.xxx 未訂閱
當我取得連線影像,並縮放至panel1 用了以下的方法,仍有時會出現畫面閃爍(空白)的問題 請問各位,以下的程式片段是否有哪個地方錯誤 謝謝 BPicture:TBitmap; panel1.DoubleBuffered:=True; hDC:=GetDC(panel1.Handle); hMemDC:=CreateCompatibleDC(hDC); SelectObject(hMemDC,BPicture.Handle); BitBlt(hMemDC,0,0,BPicture.Width,BPicture.Height,BPicture.Handle,0,0,SRCCOPY); SetStretchBltMode(hDC,HALFTONE); StretchBlt(hDC,0,0,panel1.Width,panel1.Height,hMemDC,0,0,BPicture.Width,BPicture.Height,SRCCOPY); DeleteDC(hMemDC);
robert1014
初階會員


發表:34
回覆:85
積分:43
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-09 21:40:09 IP:203.204.xxx.xxx 未訂閱
這幾天試了一下 發現只要是用 TBitmap 或 TImage 收取影像,都會造成畫面的閃爍 只有改用 TPaintBox 才會正常 但另有個問題想請問 PaintBox的影像處理完之後,如何給 TBitmap、TImage等物件使用呢? 或者可否將資料存成Buffer呢?? 感謝各位給點意見,幫忙一下
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-09 22:01:13 IP:140.135.xxx.xxx 未訂閱
robert1014您好:  將Image的Stretch的屬性改成true應該就可以了  或是參考  http://delphi.ktop.com.tw/topic.php?topic_id=18647 順心 發表人 -
robert1014
初階會員


發表:34
回覆:85
積分:43
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-09 22:29:29 IP:203.204.xxx.xxx 未訂閱
謝謝 其實討論區內關於閃爍的關鍵字,我都已查過了 原程式前段如下 sImage:TMemoryStream; JPicture:TJpegimage; BPicture:TBitmap; .............. sImage.WriteBuffer(arrData,iSize); sImage.Position:=0; JPicture.LoadFromStream(sImage); BPicture.Width := JPicture.Width; BPicture.Height := JPicture.Height; BPicture.Canvas.Draw(0,0,JPicture); ................ 試的結果問題是出在 BPicture:TBitmap,若其改成 TImage 也 是會有閃爍的問題,只有改成 TPaintBox 才會正常 但若使用 TPaintBox 後,我後續的一些處理又不方便 因此才想問 TPaintBox 可否存成 Buffer 或將資料傳給 TImage 等物件 謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-09 22:42:17 IP:140.135.xxx.xxx 未訂閱
robert1014您好:    因為我是用BCB,所以我用BCB的方式描述 加入 >>>>>> >
robert1014
初階會員


發表:34
回覆:85
積分:43
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-09 22:54:20 IP:203.204.xxx.xxx 未訂閱
謝謝,不過可能是我沒有說清楚 現程式已改成如下 sImage:TMemoryStream; JPicture:TJpegimage; pbPicture:TPaintBox; //需用此物件 .............. sImage.WriteBuffer(arrData,iSize); sImage.Position:=0; JPicture.LoadFromStream(sImage); pbPicture.Width := JPicture.Width; pbPicture.Height := JPicture.Height; pbPicture.Canvas.Draw(0,0,JPicture); //用TPaintBox物件才可避免閃爍 ................ 新的問題是 當我改用 pbPicture 接收影像之後,有作了一些圖形的處理 如 pbPicture.Canvas.Textout(3, 2, 'Delphi'); 等等 因此才想問處理後的 pbPicture,TPaintBox這個物件 該如何將資料存成Buffer或傳給其他的物件,如 TImage 等等 謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-09 23:32:03 IP:140.135.xxx.xxx 未訂閱
robert1014您好:    
引言:處理後的 pbPicture,TPaintBox這個物件該如何將資料存成Buffer或傳給其他的物件,如 TImage 等等
是不是這樣?? PaintBox1處理過後 PaintBox1->Canvas->Draw(0,0,Image1->Picture->Bitmap); 附帶一提,我用Image接收連續影像並不會有閃爍的現象耶... 只要將Image的Stretch的屬性改成true 或是加入 Image1->Height=BPicture->Height; Image1->Width =BPicture->Width; Image1->Canvas->Draw( 0,0,BPicture ) ; 都可以避免閃爍的現象 順心 發表人 -
robert1014
初階會員


發表:34
回覆:85
積分:43
註冊:2002-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-09 23:42:43 IP:203.204.xxx.xxx 未訂閱
謝謝,不過應該不是這個樣子吧 您寫的是將 Image1->Picture->Bitmap 給 PaintBox1 我要的剛好是相反 是的,我原本也是用 Image1->Canvas->Draw( 0,0,BPicture ) ; 或 Bitmap1->Canvas->Draw( 0,0,BPicture ) ; 將JPEG影像轉成Bitmap,雖然出現整頁空白閃爍的情況 不常發生,但是偶爾還是會出現 直到我改用TPaintBox,才一切正常 發表人 - robert1014 於 2003/04/09 23:48:47
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-10 00:04:22 IP:140.135.xxx.xxx 未訂閱
robert1014您好:   對不起,我是豬頭...   改成   Image1->Canvas->CopyRect(Rect(0,0,320,240), PaintBox1->Canvas, Rect   (0, 0, 320, 240));   假設PaintBox1的大小為320*240    順心 發表人 -
robert1014
初階會員


發表:34
回覆:85
積分:43
註冊:2002-03-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-10 00:10:06 IP:203.204.xxx.xxx 未訂閱
哪裡、哪裡,別這麼說 其實我也有試過CopyRect,但是若PaintBox1物件上有其他的視窗蓋住時 則Copy下來的畫面,不是原PaintBox的影像,而是包含了所蓋住的影像 所以現在仍在傷腦筋....... 謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-10 13:52:26 IP:140.135.xxx.xxx 未訂閱
robert1014您好:       
引言: 但是若PaintBox1物件上有其他的視窗蓋住時 則Copy下來的畫面,不是原PaintBox的影像,而是包含了所蓋住的影像
我有一個很爛的方法,就是將Form的Style的屬性改成fsStayOnTop 這樣就不會有其他的視窗蓋住PaintBox了 順心
robert1014
初階會員


發表:34
回覆:85
積分:43
註冊:2002-03-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-04-10 14:39:16 IP:61.220.xxx.xxx 未訂閱
呵呵,謝謝您的提議 不過我就是因為會運用到畫面的切換 所以才要將已處理完的資料,當成是來源資料
系統時間:2024-03-29 8:15:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!