int width =  41;
int height =  100; int lineByteCnt = ( ((width*24)+31) >>5 ) << 2;
unsigned char* expanded_data = new unsigned char[ lineByteCnt * height];
memset(expanded_data, 0, lineByteCnt * height); // 初始化为黑色
for(int j=0; j < height; j++)
{
for(int i=0; i < width; i++)
{
expanded_data[3*(i+(height-j-1)*width)]=
expanded_data[3*(i+(height-j-1)*width)+1] =  
expanded_data[3*(i+(height-j-1)*width)+2] = 
255; // 白色
}
} BITMAPINFOHEADER bminf;
memset(&bminf, 0, sizeof(bminf));
bminf.biSize = sizeof(bminf);
bminf.biWidth = width;
bminf.biHeight = height;
bminf.biCompression = BI_RGB;
bminf.biPlanes = 1;
bminf.biBitCount = 24; // 每个像素的位数
bminf.biSizeImage = lineByteCnt * height; // 图像数据大小 BITMAPINFO bmi;
memset(&bmi,0,sizeof(BITMAPINFO));
bmi.bmiHeader = bminf; HDC hMemDC = ::CreateCompatibleDC( hdc );
HBITMAP hbm = CreateDIBitmap(hdc, &bminf,
CBM_INIT, expanded_data, (LPBITMAPINFO)&bmi, DIB_RGB_COLORS);

::SelectObject( hMemDC, hbm );
::BitBlt(hdc, 10, 10, width, height, hMemDC, 0, 0, SRCCOPY);
::DeleteObject( hbm );
::DeleteDC( hMemDC ); free(expanded_data);我用上面的代码创建一个位置,发现有个问题,就是当第一行的width不为4的倍数时,
显示出来的矩形不完全是白色的,上边上总有一点黑色的,这是怎么回事。