天天看點

第十七篇:執行個體分析(3)--初探WDDM驅動學習筆記(十)

續:

還是記錄一下, BltFuncs.cpp中的函數作用:

CONVERT_32BPP_TO_16BPP 是将32bit的pixel轉換成16bit的形式.

輸入是DWORD

32位中, BYTE 0,1,2分别是RGB分量, 而BYTE3則是不用的

為了不減少color的範圍, 是以,都是取RGB8,8,8的高RGB5, 6, 5位, 然後将這16位構成一個pixel.

CONVERT_16BPP_TO_32BPP是将16bit的pixel轉換成32bit的形式

輸入是WORD

16BIT中, 分解出5, 6, 5

然後, 将5, 6, 5 放入BYTE 0, 1, 2的位元組中, 低位用0補(同樣, 不能減少color的範圍)

CONVERT_32BPP_TO_8BPP

CONVERT_32BPP_TO_4BPP

不是特别明白它的轉換原理,

8PP,是從6級去考慮, 4PP,是從RGB所占的比例去考慮

CopyBits32_32

是從src copy 到 dst的函數

參數中除了src and dst還有需要copy的src表現中的矩形的個數,以及矩形的參數

是以, copy過程就是src中需要COPY的矩形的循環

GetPitches

GetRowStart

這兩個函數, 分别是

第一個,得出每一個像素, 每一行的位元組數

第二個,得出某一個矩形在表面的資料集中(pBits指向的一塊記憶體, 一個像素一個像素, 一行一行地存在記憶體中)的起始位置

它們都針對ROTATION, 90,180,270,0的情況分别給出結果

CopyBitsGeneric

是在各行不同BIT的像素間COPY的函數, 相對CopyBits32_32具有通用行

BltBits

就是調用

CopyBits32_32或者CopyBitsGeneric進行COPY的函數