ncolors = (1 << bi.bibitcount);
}
dwlen = bi.bisize + ncolors * sizeof(rgbquad);
hdc = ::getdc(null);
hpal = selectpalette(hdc,hpal,false);
realizepalette(hdc);
//为信息头及颜色表分配内存
hdib = globalalloc(gmem_fixed,dwlen);
if (!hdib){
selectpalette(hdc,hpal,false);
::releasedc(null,hdc);
return null;
}
lpbi = (lpbitmapinfoheader)globallock(hdib);
*lpbi = bi;
//调用 getdibits 计算图像大小
getdibits(hdc, (hbitmap)bitmap.getsafehandle(), 0l, (dword)bi.biheight,
(lpbyte)null, (lpbitmapinfo)lpbi, (dword)dib_rgb_colors);
bi = *lpbi;
//图像的每一行都对齐(32bit)边界
if (bi.bisizeimage == 0){
bi.bisizeimage = ((((bi.biwidth * bi.bibitcount) + 31) & ~31) / 8)
* bi.biheight;
if (dwcompression != bi_rgb)