天天看点

第十七篇:实例分析(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的函数