cmf
尊榮會員
發表:84 回覆:918 積分:1032 註冊:2002-06-26
發送簡訊給我
|
DrawDib函數組的使用
的針對與設備無關點陣圖(DIB 的Multimedia 點陣圖的高性能函數組──DrawDib 函數組是一組不依賴於圖形設備介面(GDI 位、16 位和32 。總的來說,DrawDib 函數,它們都提供了將圖像拉伸和抖動的功能,然而,DrawDib 函數組還具有更大的優越性。但是,在某些場合下,DrawDib 函數。下麵就DrawDib 函數使用的場合加以區別和說明:
- 函數組只支援顏色資訊表格式為DIB_RGB_COLORS或DIB_PAL_INDICES函數。
- 函數組只能使用SRCCOPY模式的話,只能用StretchDIBits,只能用StretchDIBits視頻及動畫重播的質量。DrawDib函數提供了更高的圖像質量以及對重播過程的改進。
- 函數組比StretchDIBits函數組支援使用4色調色板的VGA位圖像深度提供256適配器和使用16位和32函數組還使用了受限制的潛在能力提高了圖像在顯示適配器上的速度和質量。例如,當使用8函數組有效地將真彩色圖像抖動為256位元的顯示適配器時,它們也將8位。
- 一樣,DrawDib函數組提供了比StretchDIBits壓縮圖像。DrawDib和Indeo?的操作
函數初始化DrawDib負責裝載動態連接庫(DLL)設備環境(DC)同時返回一個其他DrawDib控制碼。
後,可以用DrawDibClose同時減少存取DLL函數應是最後的DrawDib 可以創建任意多的DrawDib
DC來繪製幾幅點陣圖。在應用程式中可以創建多個不同性質的DrawDib
DC設置。例如,在同一應用程式中,創建兩個不同的DrawDib
DC 為了更有效地運行,DrawDib函數組的DLL函數組的所有應用都要用到這個配置資訊。可以通過調用DrawDibProfileDisplay
通常,取得和保存顯示配置是一次性的事件。如果配置資訊發現在這個系統中安裝了另一個顯示驅動時,DrawDib
創建了DrawDib
DC函數將DIB位元深度的顯示適配器上顯示真彩色圖像時,DrawDib也透明地支援視頻壓縮器。當顯示壓縮點陣圖時,可通過DrawDibGetBuffer返回NULL 可用DrawDibUpdate圖像序列
給DrawDibDraw的DC的控制碼,BITMAPINFOHEADER要檢查序列中的每幅圖像的這些值。如果DrawDibDraw來調整DrawDib
DC 當調用完DrawDibBegin繪製圖像序列。只要DC標誌;下列參數未改變,就可指定DDF_SAME_DRAW結構的位址和源矩形及目的矩形的尺寸。
後跟另一個DrawDibBegin設置的標誌。DrawDibEnd的標誌和設置。後續的調用DrawDibBegin,並重新設置適當的標誌和設置。然而,只要至少改變了以下任一個當前的標誌設置:BITMAPINFOHEADER而直接調用DrawDibBegin。
和DrawDibStop的效率。DrawDibStart)準備DrawDib
DC發送一個消息給VCM
需要注意的是,在應用程式中必須確定源矩形和目的矩形的寬度和高度;然而卻並不需要確定這些矩形的起點。應用程式可以重新DrawDibDraw函數組需要回應兩條調色板消息:WM_QUERYNEWPALETTE。如果應用程式未注意到調色板,就需要對這些消息都增加一個各自的消息處理。
函數可在當前DC的調色板。應當在回應WM_QUERYNEWPALETTE消息時,或在用DrawDibDraw 可以用DrawDibSetPallette強迫DrawDib
DC實現它自己的調色板。應用程式可以通過DrawDibSetPalette調色板的使用。
函數可以獲得當前前景調色板的一個控制碼。如果應用程式使用了當前前景調色板,它並沒有對調色板的完全使用權,另一個應用程式能夠使這個調色板控制碼無效。當使用完畢後,應用程式不應該釋放調色板,那樣會使另一個應用程式不能使用調色板。
函數可以為它的調色板DrawDib的後面的代碼裏,可以為調色板顏色表指定新的值。當調用DrawDibChangPalette中未設置DDF_ANIMATE來實現調色板和DrawDibDraw標誌在DrawDib
DC或DrawDibRealize和DrawDibBegin標誌。
的DrawDib使用調色板時會報告一個GDI改變DrawDib
DC 由於以下函數會釋放DrawDib選中不應使用:DrawDibEnd,DrawDibClose。同樣的,當使用了相同的DrawDib
DC或dySrc也會釋放調色板。
作為調試應用程式的一部分,調用DrawDibTime操作所需時間。DrawDibTime繪製一幅點陣圖
- 抖動一幅點陣圖
- 使用BitBlt使用StrecthDIBits 得到返回值後,DrawDibTime 注意,DrawDibTime函數的調試版中可用。
DrawDib 增加調色板消息處理
和WM_QUERYNEWPALETTE函數來進行WM_QUERYNEWPALETTE
應用程式應通過使目標視窗無效來讓DrawDibDraw消息。應用DrawDibRealize消息。
case WM_PALETTECHANGED:
if ((HWND) wParam == hwnd)
break;
case WM_QUERYNEWPALETTE:
hdc = GetDC(hwnd);
f = DrawDibRealize (hdd,hdc,FALSE) > 0;
ReleaseDC (hwnd,hdc);
if (f)
InvalidateRect ( hwnd,NULL,TRUE);
break;
下面例子用DrawDibrealize 調色板動畫
和DrawDibDraw 能夠用DrawDibBegin函數改變一幅點陣圖的顏色。首先,在調用DrawDibBegin標誌允許調色板改變;然後,用DrawDibChangePalette 例如,如果lppe佇列的位址,並且lpbi或DrawDibDraw結構,則後面的程式片段更新DIB改變顏色調用
DrawDibChangePalette(hdd,iStart,iLen,lppe);
……
ReleaseDC(hwnd,hdc);
下Windows95環境下通過。)
void CTestDrawDibView::OnDraw(CDC* pDC)
得到文檔指標
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
m_DibMem = pDoc->m_Buf;//的記憶體
if (m_DibMem == NULL)
}
UINT offset = pDoc->m_Off; //數據的偏移
int xDst,yDst,dxDst,dyDst,xSrc,ySrc,dxSrc,dySrc;
LPBITMAPINFOHEADER lpbi;
LPVOID lpDibMem;
LPVOID lpbits=NULL;
// get the Windows width & height
得到DIB鎖定記憶體得到指標
lpbi = (LPBITMAPINFOHEADER)lpDibMem;//信息
dxSrc = lpbi->biWidth;
dySrc = lpbi->biHeight;
lpbits = (LPSTR)lpDibMem offset -
sizeof(BITMAPFILEHEADER);
// Draw Dib使用SetDIBToDevice函數為對照
int line = SetDIBitsToDevice(hdc,
xDst,
yDst,
dxSrc,
&
------ ︿︿
|