1、int SetDIBitsToDevice(HDC hdc, //设备环境句柄。
int xDest, //指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。
int Ydest, //指字目标矩形左上角的Y轴坐标,按逻辑单位表示坐标
DWORD dwWidth,//指定DIB的宽度,按逻辑单位表示宽度
DWORD dwHeight, //指定DIB的高度,按逻辑单位表示高度
intXSrc,//指定DIB位图左下角的X轴坐标,按逻辑单位表示坐标。
int Ysrc,//指定DIB位图左下角的Y轴坐标,按逻辑单位表示坐标
UINT uStartScan, //指定DIB中的起始扫描线
UINT cScanLines, //指定参数lpvBits指向的数组中包含的DIB扫描线数目
CONST VOID *lpvBits, //指向存储DIB颜色数据的字节类型数组的指针
CONST BITMAPINFO *lpbmi, //指向BITMAPINFO结构的指针,该结构包含有关DIB的信息
UINT fuColorUse)//指向BITMAPINFO结构中的成员bmiColors是否包含明确的RGB值或对调色板进行索引的值。
参数fuColorUse必须是下列值之一,这些值的含义如下:
DIB_PAL_COLORS:表示颜色表由16位的索引值数组组成,利用这些值可对当前选中的逻辑调色板进行索引。
DIB_RGB_COLORS:表示颜色表包含原义的RGB值。
返回值:如果函数执行成功,那么返回值是设置的扫描线数目;如果函数失败,那么返回值为0。
https://baike.baidu.com/item/SetDIBitsToDevice/6377604?fr=aladdin
2、BITMAPINFO结构
位图信息头BITMAPINFOHEADER,也是一个结构体,其定义如下:
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biSizeImage = (iWidth * 24 + 31) / 32 * 4 * iHeight;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = iWidth;
bmi.bmiHeader.biHeight = iHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;
https://blog.youkuaiyun.com/wangwenjing90/article/details/8537355
https://blog.youkuaiyun.com/xiaoxiao133/article/details/53507893
【注】一般采用横向扫描。