雙緩存
『壹』 圖片裡面的雙緩沖是什麼意思
把要顯示的東西全部繪制在一張'圖片'上(內存開辟),然後再把這張'圖片'一次性顯示到屏幕上~
『貳』 單緩沖和雙緩沖 有什麼區別
單緩沖,實際上就是將所有的繪圖指令在窗口上執行,就是直接在窗口上繪圖,這樣的繪圖效率是比較慢的,如果使用單緩沖,而電腦比較慢,你回到屏幕的閃爍。
雙緩沖,實際上的繪圖指令是在一個緩沖區完成,這里的繪圖非常的快,在繪圖指令完成之後,再通過交換指令把完成的圖形立即顯示在屏幕上,這就避免了出現繪圖的不完整,同時效率很高。
一般用OpenGL繪圖都是用雙緩沖,單緩沖一般只用於顯示單獨的一副非動態的圖像。
『叄』 C++雙緩沖
dc肯定要有bitmap的,你建一個就行,然後ipicture往hmydc里render不就行了,最後再bitblt到hdc里
『肆』 垂直同步 雙緩沖跟三級緩沖是什麼 有什麼不同啊
先說垂直同步 你開了垂直只是把刷新幀數控制在顯示器的刷新率上 一般顯示器是75 極品17最高才30幀 照樣玩著沒事 而且開了垂直頂多是讓幀數比較平均 不會突然換個場景後卡一下至於三倍緩沖 這個得是在開了垂直同步後才能生效 大概意思就是 顯卡可以預先渲染更多的幀數 希望採納
『伍』 java中的雙緩沖
paint (offScreen);
分好改成英文的
畫面重畫 offScreenImage 是保存在內存中原來的畫 畫中有個圓
圓的移動是通過 畫面重畫實現的 所以先把原來offScreenImage畫出來 再在這個之上畫一個圓
paint (offScreen); 這句畫就是把offScreenImage重新畫上去
注釋掉後 剛打開 你在一個窗口畫圓 然後保存在內存 再重新出現一個窗口 但不畫offScreen 窗口當然就是空白的了
能明白不
『陸』 雙緩沖的實現方法
我們看電視時,看到的屏幕稱為OSD層,也就是說,只有在OSD層上顯示圖像我們才能看到。在圖形圖象處理編程過程中,雙緩沖是一種基本的技術。我們知道,如果窗體在響應WM_PAINT消息的時候要進行復雜的圖形處理,那麼窗體在重繪時由於過頻的刷新而引起閃爍現象。
『柒』 雙緩沖的1實現方法
在圖形圖象處理編程過程中,雙緩沖是一種基本的技術。我們知道,如果窗體在響應WM_PAINT消息的時候要進行復雜的圖形處理,那麼窗體在重繪時由於過頻的刷新而引起閃爍現象。解決這一問題的有效方法就是雙緩沖技術。因為窗體在刷新時,總要有一個擦除原來圖象的過程OnEraseBkgnd,它利用背景色填充窗體繪圖區,然後在調用新的繪圖代碼進行重繪,這樣一擦一寫造成了圖象顏色的反差。當WM_PAINT的響應很頻繁的時候,這種反差也就越發明顯。於是我們就看到了閃爍現象。
雙緩沖我們會很自然的想到,避免背景色的填充是最直接的辦法。但是那樣的話,窗體上會變的一團糟。因為每次繪制圖象的時候都沒有將原來的圖象清除,造 成了圖象的殘留,於是窗體重繪時,畫面往往會變的亂七八糟。所以單純的禁止背景重繪是不夠的。我們還要進行重新繪圖,但要求速度很快,於是我們想到了使用 BitBlt函數。它可以支持圖形塊的復制,速度很快。我們可以先在內存中作圖,然後用此函數將做好的圖復制到前台,同時禁止背景刷新,這樣就消除了閃 爍。以上也就是雙緩沖繪圖的基本的思路。
首先給出實現的程序,然後再解釋,同樣是在OnDraw(CDC *pDC)中:
CDC MemDC; //首先定義一個顯示設備對象
CBitmap MemBitmap;//定義一個點陣圖對象
//隨後建立與屏幕顯示兼容的內存顯示設備
MemDC.CreateCompatibleDC(NULL);
//這時還不能繪圖,因為沒有地方畫 ^_^
//下面建立一個與屏幕顯示兼容的點陣圖,至於點陣圖的大小嘛,可以用窗口的大小,也可以自己定義(如:有滾動條時就要大於當前窗口的大小,在BitBlt時決定拷貝內存的哪部分到屏幕上)
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
//將點陣圖選入到內存顯示設備中
//只有選入了點陣圖的內存顯示設備才有地方繪圖,畫到指定的點陣圖上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//先用背景色將點陣圖清除干凈,這里我用的是白色作為背景
//你也可以用自己應該用的顏色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
//繪圖
MemDC.MoveTo(……);
MemDC.LineTo(……);
//將內存中的圖拷貝到屏幕上進行顯示
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
//繪圖完成後的清理
//把前面的pOldBit選回來.在刪除MemBitmap之前要先從設備中移除它
MemDC.SelectObject(pOldBit);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
雙緩沖(two way soft-closing)
『捌』 什麼是雙緩沖
可是,我卻對雙緩沖這個詞感到莫名其妙
雙緩沖聽起來好像很深奧,其實其本質很簡單:就是先生成一張點陣圖,然後把所有的繪圖工作都畫的這張點陣圖上,然後再將這張點陣圖一次性畫到屏幕中去。
它的關鍵技術就是: 不要直接在屏幕上畫圖,而是將所有的繪圖工作先繪制到圖片上
我們研究下從開始繪圖到屏幕顯示圖像的過程
第一步: 將所有的繪圖緩沖到點陣圖中
第二步:將點陣圖拷貝到屏幕上,此時相當於所有的繪圖又跳躍到了屏幕
繪圖進行了兩次跳躍:第一次跳躍到點陣圖中,第二次跳躍到屏幕上,所以這種技術可以稱之為雙緩沖
閃爍的原因就是新圖和舊圖直接的差別造成的。
1) 更新時,先使用背景刷 刷一下背景,然後再貼圖 背景刷和圖像之間的差別能造成閃爍,這點可通過響應察除背景刷消息來消除 OnEraseBkgnd(CDC* pDC)
2) 先畫一張白色圖片,然後再在白色圖片上畫紅色矩形
此時,背景刷問題解決了,但是在屏幕上 首先貼一張白圖,然後再白圖上畫一個紅色矩形,二者顏色差別明顯,如果頻繁繪圖時,便不可避免的產生閃爍。
那如果使用雙緩沖,此種現象便可以消除,分析如下:
先把白色圖畫到內存點陣圖中,然後再將紅色矩形畫到這個內存點陣圖中,最後將這個點陣圖拷貝到屏幕上。
由於原屏幕上的圖像與點陣圖中的圖像差別很小(都是白色圖和紅矩形),因此當頻繁繪圖時,可有效降低閃爍
鄙視一下 那些講不清道理,又不肯給出實例的傢伙--0--
以下是偽代碼:
『玖』 java雙緩沖問題!!
paint()方法中其實並未實現雙緩沖,雙緩沖是在後台虛擬的Image中繪制完成後再返回當前窗口,而這個代碼直接調用g進行兩次drawImage,其實就是直接對當前窗口進行繪制,有覆蓋區域,會產生閃爍,,按照下列修改paint()方法就可以了
public void paint(Graphics g) {
g1.setColor(this.getBackground());
g1.fillRect(0,0,202,154);
g1.drawImage(age1,0,0,200,150,i,96,96,i,this);
g1.drawImage(age,0,0,200,150,0,0,200,150,this);
g.drawImage(x,0,0,this); //把x圖像返回到當前窗口
}