播放連續圖檔如何作才能避免螢幕的閃爍 |
|
TheMoon
中階會員 發表:17 回覆:95 積分:67 註冊:2002-06-05 發送簡訊給我 |
|
ufstep
一般會員 發表:8 回覆:11 積分:3 註冊:2002-04-14 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 請問該如何作才能避免 連續圖檔播放時螢幕的閃爍 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 發送簡訊給我 |
我用的辦如下:
用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 發送簡訊給我 |
最近在一些模組時發生,部分狀況用 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 發送簡訊給我 |
|
babyfish0226
一般會員 發表:9 回覆:82 積分:23 註冊:2002-06-14 發送簡訊給我 |
|
雪豆豆
一般會員 發表:19 回覆:22 積分:13 註冊:2002-08-18 發送簡訊給我 |
不要用 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 發送簡訊給我 |
引言: [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 發送簡訊給我 |
引言: 不要用 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 發送簡訊給我 |
引言: 請問站長大大...這個 DoubleBuffer 的屬性只能在 RunTime 時指定 這句話是什麼意思呢?? RunTime...我不太了解這是什麼...可以請各位知道的大大再做更詳細的解說ㄇ...謝謝各位大大ㄉ幫忙 ^^"RunTime就是寫在程式碼中, 不是在Delphi的IDE中靜態去設定屬性與方法! 如:Form1. DoubleBuffered :=true; ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
biau
一般會員 發表:25 回覆:32 積分:21 註冊:2003-02-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |