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

播放連續圖檔如何作才能避免螢幕的閃爍

 
TheMoon
中階會員


發表:17
回覆:95
積分:67
註冊:2002-06-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-05 04:27:14 IP:163.28.xxx.xxx 未訂閱
請問該如何作才能避免 連續圖檔播放時螢幕的閃爍 For I:=1 to N do Image1.Picture.Bitmap:=PImage[I].Picture.Bitmap;
ufstep
一般會員


發表:8
回覆:11
積分:3
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-05 10:10:40 IP:202.8.xxx.xxx 未訂閱
引言: 請問該如何作才能避免 連續圖檔播放時螢幕的閃爍 For I:=1 to N do Image1.Picture.Bitmap:=PImage[I].Picture.Bitmap;
試試看加 Refresh();
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-05 11:47:33 IP:192.168.xxx.xxx 未訂閱
引言: 請問該如何作才能避免 連續圖檔播放時螢幕的閃爍 For I:=1 to N do Image1.Picture.Bitmap:=PImage[I].Picture.Bitmap;
站長轉貼之前dllee發表: dllee 回覆文章於 Delphi K.Top討論區 主題: 如何使圖形不閃爍 在 BCB 中,對於貼圖動畫要讓它不閃爍,我用的方法很簡單,如果您的圖是放在 TForm 或是 TPanel ,只要啟動它們的 DoubleBuffer 屬性為 true 即可。 這個 DoubleBuffer 的屬性只能在 RunTime 時指定,所以我通常寫在 TForm 的建構元或是 FormCreate 事件中。 ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-06-05 11:48:21 IP:192.168.xxx.xxx 未訂閱
我用的辦如下: 用Canvas+CopyRect
    unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
  StdCtrls, Buttons, ExtCtrls;    type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.DFM}    procedure TForm1.BitBtn1Click(Sender: TObject);
var i:integer;
    r1,r2,r3:trect;
    w,h:integer;
begin
   w:=image1.width;
   h:=image1.height;
   for i:=1 to w 1 do
   begin
      r1.top:=0;
      r1.left:=0;
      r1.right:=w-i;
      r1.Bottom:=h;
      r2.top:=0;
      r2.left:=i;
      r2.right:=w;
      r2.bottom:=h;
      image1.Canvas.CopyRect(r1,image2.canvas,r2);
      r3.top:=0;
      r3.left:=w-i 1;
      r3.right:=w;
      r3.bottom:=h;
      image1.Canvas.Brush.color:=clwhite;
      image1.Canvas.FillRect(r3);
      application.ProcessMessages;
      sleep(1);
   end;
end;    end.    
~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-06-05 16:04:49 IP:210.243.xxx.xxx 未訂閱
最近在一些模組時發生,部分狀況用 DoubleBuffer 是無法輕易就避免掉閃爍,特別是圖上再疊圖的時候。 例如:圖2放在圖1上,而因動態需要圖2必需依狀態改變,而圖1、圖2都在 TForm 內。 如果變化的圖2它的大小是會改變,則 TForm 設 DoubleBuffer 為 true 仍然會發生閃爍。我與同事討論的結果是,因為圖2改變了大小會使得圖1重繪(因圖2在圖1上)因圖1占整個 TForm ,所以圖1的重繪較容易讓人看到閃爍。這時只要相辦法讓變化的圖2不要改變大小而導致圖1重繪,就不會看到閃爍了。 所以,目前我的反閃爍絕招是: 1. 在 TForm 建構元 將 TForm 的 Double 設為 true 2. 將變化的圖檔都設為一樣大小
------
http://www.ViewMove.com
babyfish0226
一般會員


發表:9
回覆:82
積分:23
註冊:2002-06-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-07-06 20:22:44 IP:61.70.xxx.xxx 未訂閱
我設定了 doublebuffered=true並將所有圖檔設定為相同大小之後,雖然會閃動的問題解決了,但我在image的mouseleave事件中卻變的有點怪怪的,再將doublebuffereed設為true之前,雖然畫面會閃,但每一次的mouseleave都能準確的被啟動,但設為true之後,滑鼠快速的移動卻不會啟動mouseleave,要慢慢滴移過去才會,真是傷腦筋,我再試試站長的方法好了。 真是一波未平一波又起,這是delphi6的bugs嗎?
babyfish0226
一般會員


發表:9
回覆:82
積分:23
註冊:2002-06-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-07-06 20:26:05 IP:61.70.xxx.xxx 未訂閱
補充:我是利用一個Label的OnMouseDown、OnMouseUp及OnMouseLeave事件是來處理切換圖片的動作。
雪豆豆
一般會員


發表:19
回覆:22
積分:13
註冊:2002-08-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-08-26 07:29:56 IP:61.223.xxx.xxx 未訂閱
不要用 TImage .. 改用 PaintBox 就不會有閃爍的狀況了... 類似底下的方式 Var BitMap : TBitMap; begin BitMap := TBitMap.Create; BitMap.LoadFromStream(Strm); Form1.ClientWidth := BitMap.Width; Form1.ClientHeight := BitMap.Height; Paintbox1.Width := BitMap.Width; Paintbox1.Height := BitMap.Height; Paintbox1.canvas.draw(0,0,BitMap); Bitmap.Free; end;
MOSCONI
一般會員


發表:1
回覆:3
積分:0
註冊:2003-07-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-24 00:12:08 IP:211.76.xxx.xxx 未訂閱
引言: [quote] 請問該如何作才能避免 連續圖檔播放時螢幕的閃爍 For I:=1 to N do Image1.Picture.Bitmap:=PImage[I].Picture.Bitmap;
站長轉貼之前dllee發表: dllee 回覆文章於 Delphi K.Top討論區 主題: 如何使圖形不閃爍 在 BCB 中,對於貼圖動畫要讓它不閃爍,我用的方法很簡單,如果您的圖是放在 TForm 或是 TPanel ,只要啟動它們的 DoubleBuffer 屬性為 true 即可。 這個 DoubleBuffer 的屬性只能在 RunTime 時指定,所以我通常寫在 TForm 的建構元或是 FormCreate 事件中。 ~~~Delphi K.Top討論區站長~~~ 請問站長大大...這個 DoubleBuffer 的屬性只能在 RunTime 時指定 這句話是什麼意思呢?? RunTime...我不太了解這是什麼...可以請各位知道的大大再做更詳細的解說ㄇ...謝謝各位大大ㄉ幫忙 ^^"
MOSCONI
一般會員


發表:1
回覆:3
積分:0
註冊:2003-07-06

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-24 00:18:16 IP:211.76.xxx.xxx 未訂閱
引言: 不要用 TImage .. 改用 PaintBox 就不會有閃爍的狀況了... 類似底下的方式 Var BitMap : TBitMap; begin BitMap := TBitMap.Create; BitMap.LoadFromStream(Strm); Form1.ClientWidth := BitMap.Width; Form1.ClientHeight := BitMap.Height; Paintbox1.Width := BitMap.Width; Paintbox1.Height := BitMap.Height; Paintbox1.canvas.draw(0,0,BitMap); Bitmap.Free; end;
請問一下大大...這ㄍ程式我好像有看過...但是我卻不知道他真正該如何使用...我也很煩惱...在圖片的閃爍上...可以請大大幫忙幫忙解說一下該如果正確使用ㄇ...拜託..~"~ 謝謝大大ㄉ幫忙 謝謝
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-24 22:25:17 IP:211.76.xxx.xxx 未訂閱
引言: 請問站長大大...這個 DoubleBuffer 的屬性只能在 RunTime 時指定 這句話是什麼意思呢?? RunTime...我不太了解這是什麼...可以請各位知道的大大再做更詳細的解說ㄇ...謝謝各位大大ㄉ幫忙 ^^"
RunTime就是寫在程式碼中, 不是在Delphi的IDE中靜態去設定屬性與方法! 如:Form1. DoubleBuffered :=true; ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
biau
一般會員


發表:25
回覆:32
積分:21
註冊:2003-02-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-08-21 12:05:37 IP:163.28.xxx.xxx 未訂閱
我用BCB5 試了一下dllee的做法,把panel的Doublebuffered設為true之後 的確可以避免閃爍的情形 但是因為我的Panel會隨著Mousemove事件不斷更改LEFT及TOP值 如此一來動作就會變的頓頓的,不知道大家有沒有好的方法....
系統時間:2024-04-29 21:49:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!